使用角度JS检查数组是否为空的条件语句

时间:2015-04-23 15:55:13

标签: javascript arrays angularjs

我有这个功能:

$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);
   }                                
};

在我的应用中,$scope.selectMove.ids$scope.selectCopy.ids不能同时为非空。我的意思是,例如当$scope.selectMove.ids非空时$scope.selectCopy.ids为空。

我的问题是,在控制台中,我总是看到两者都会复制并移动。

5 个答案:

答案 0 :(得分:10)

注意[] != []返回true(因为它们是不同的对象)。

您应该使用length来检查数组是否为空。

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

答案 1 :(得分:6)

我认为你应该通过angular.isObject()进行检查,如果它是一个对象,它将返回true。

$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);
   }                               
};

答案 2 :(得分:3)

您必须检查空值或未定义值。

$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);
   }                               
};

答案 3 :(得分:2)

您可能需要使用if else条件:

if (empty){
  console.log('empty');
}else{
  console.log('not empty');
}
你的代码中的

。它是这样的:

$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);
   }                               
};

答案 4 :(得分:0)

如果你想确保它是一个内部至少有一个元素的数组,那就做一个小函数来检查它。 (也许你以后想要延长那个检查)

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);
    }
};

还要避开弱!=运算符,请使用严格的!==

[]相比没有帮助,[]将始终返回一个新数组。