在javascript和angularjs中检查有多少数组的长度大于0

时间:2017-03-29 09:20:18

标签: javascript angularjs arrays

我正在尝试在我的应用中创建验证。

我所拥有的是带有切换的多个列表(真/假)。

如果选择了该项,则会填充数组。

每组都有不同的数组。

几乎是这样的:

$scope.selected = {
  group1: {
    values: []
  },
  group2: {
    values: []
  },
  group3: {
    values: []
  }
}

当我选择某些内容时,让我们说,从第1组的列表中,$ scope.selected对此进行了更改:

$scope.selected = {
   group1: {
     values: [{cat: 1, id: 1},{cat:1, id:3}]
   }
}

我遇到的问题是我正在尝试验证这一点。

如果多个值数组大于0,我需要能够显示消息。

例如:

$scope.selected = {
   group1: {
     values: [{cat: 1, id: 1},{cat:1, id:3}]
   },
   group2: {
     values: [{cat: 2, id: 5},{cat:2, id:2}]
   }
}

应显示一条消息,因为我无法一次提交多个群组。

我知道我可以使用某种功能来检查组的特定名称,但是我需要更动态的东西,因为组可能(并且会)在某些时候增加(即我会有更多)我现在拥有的那些团体。)

有什么方法可以检查我的所有组数组中只有一个不是空的,如果多个不是空的,我会显示一些东西吗?

谢谢,我希望它足够清楚

2 个答案:

答案 0 :(得分:1)

您可以使用Array#filterObject.keys(o)

const selected = {
   group1: {
     values: [{cat: 1, id: 1},{cat:1, id:3}]
   },
   group2: {
     values: [{cat: 2, id: 5},{cat:2, id:2}]
   }
};
const validSelected = {
   group1: {
     values: [{cat: 1, id: 1},{cat:1, id:3}]
   },
   group2: {
     values: []
   }
};

function validate(obj){
  return Object.keys(obj).filter(k=>obj[k].values.length>0).length === 1;
}



console.log(validate(selected)); //false
console.log(validate(validSelected)); //true

没有 ES6 箭头:

Object.keys(obj).filter(function(k){return obj[k].values.length>0).length === 1});

答案 1 :(得分:1)

您可以遍历对象:

var count = 0;
for (var group in $scope.selected) {
   if ($scope.selected.hasOwnProperty(group) && group.values.length > 0) 
      count++;
}

if (count > 1)
   console.log("More than one group with values");