我正在尝试在我的应用中创建验证。
我所拥有的是带有切换的多个列表(真/假)。
如果选择了该项,则会填充数组。
每组都有不同的数组。
几乎是这样的:
$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}]
}
}
应显示一条消息,因为我无法一次提交多个群组。
我知道我可以使用某种功能来检查组的特定名称,但是我需要更动态的东西,因为组可能(并且会)在某些时候增加(即我会有更多)我现在拥有的那些团体。)
有什么方法可以检查我的所有组数组中只有一个不是空的,如果多个不是空的,我会显示一些东西吗?
谢谢,我希望它足够清楚
答案 0 :(得分:1)
您可以使用Array#filter
和Object.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");