2015-04-23 9 views
5

mam tej funkcji:warunkowe oświadczenie, by sprawdzić, czy tablica jest pusta z kątowym JS

$scope.doPaste = function(destination) {        
    if ($scope.selectCopy.ids != []) { 
     console.log("will copy"); 
     $scope.CopyFiles(destination); 
    } 
    if ($scope.selectMove.ids != []) { 
     console.log("will move"); 
     $scope.MoveFiles(destination); 
    }         
}; 

W mojej aplikacji, $scope.selectMove.ids i $scope.selectCopy.ids nie może być zarówno niepusty. Mam na myśli na przykład, gdy $scope.selectMove.ids jest niepusty. $scope.selectCopy.ids jest pusty.

Mój problem polega na tym, że w konsoli zawsze widzę, że oba będą się kopiować i będą się poruszać.

+3

Lepiej sprawdź właściwość '.length'! –

Odpowiedz

9

Uwaga [] != [] powrotu true (ponieważ różne obiekty).

Powinieneś użyć length, aby sprawdzić, czy tablica jest pusta.

if($scope.selectCopy.ids.length > 0){ 
    console.log("will copy"); 
    $scope.CopyFiles(destination); 
} 
+0

Tutaj jest dobre odniesienie do tego, co się nie zgadza i prawda: http://www.quirksmode.org/js/boolean.html – MBielski

+1

dziękuję, działa – Yuri

+0

@marwa Nie ma za co . – xdazz

3

Należy sprawdzić wartości puste lub niezdefiniowane.

$scope.doPaste=function(destination) { 
    if ($scope.selectCopy.ids && $scope.selectCopy.ids.length > 0) { 
     console.log("will copy"); 
     $scope.CopyFiles(destination); 
    } 
    if ($scope.selectMove.ids && $scope.selectMove.ids.length > 0) { 
     console.log("will move"); 
     $scope.MoveFiles(destination); 
    }        
}; 
+0

dziękuję, działa – Yuri

6

myślę, że należy sprawdzić przez angular.isObject() który zwróciłby true, jeśli jest to obiekt.

$scope.doPaste = function(destination) { 
    if (angular.isObject($scope.selectCopy.ids) && $scope.selectCopy.ids.length > 0) { 
     console.log("will copy"); 
     $scope.CopyFiles(destination); 
    } 

    if (angular.isObject($scope.selectMove.ids) && $scope.selectMove.ids.length > 0){ 
     console.log("will move"); 
     $scope.MoveFiles(destination); 
    }        
}; 
+1

@downvoter dlaczego downvote? –

+1

Tak, to rozwiązanie powinno działać poprawnie. –

0

Jeśli chcesz się upewnić, że jest to tablica z co najmniej jednym elementem w środku, wykonaj małą funkcję, aby to sprawdzić. (Być może będziemy chcieli przedłużyć ten czek później)

var isNonEmptyArray = function(ar){ 
    return Array.isArray(ar) && (ar.length > 0); 
}; 

$scope.doPaste=function(destination){ 

    if(isNonEmptyArray($scope.selectCopy.ids)){ 
    console.log("will copy"); 
    $scope.CopyFiles(destination); 
    } 
    if(isNonEmptyArray($scope.selectMove.ids)){ 
    console.log("will move"); 
    $scope.MoveFiles(destination); 
    } 
}; 

uniknąć także słaby != operatora, użyj ścisłego jeden !==.

W porównaniu do [] nie jest pomocne, [] zawsze zwróci nową tablicę.

2

Może trzeba użyć if else warunek:

if (empty){ 
    console.log('empty'); 
}else{ 
    console.log('not empty'); 
} 

w kodzie. to jest coś takiego:

$scope.doPaste=function(destination) { 
    if ($scope.selectCopy.ids && $scope.selectCopy.ids.length > 0) { 
     console.log("will copy"); 
     $scope.CopyFiles(destination); 
    } 
else { 
     console.log("will move"); 
     $scope.MoveFiles(destination); 
    }        
}; 
Powiązane problemy