这是我的问题:我可以拥有这个对象数组:
[{
"name": "Alex",
"code": "05422180283",
"pIva": "05422180283",
"subCode": null
}, {
"name": "John",
"code": null,
"pIva": null,
"subCode": "IT"
}, {
"name": "Billy",
"code": null,
"pIva": null,
"subCode": "IT"
}, {
"name": "Tom",
"code": null,
"pIva": null,
"subCode": "IT"
}]
此json以ng-repeat
的形式使用,应填充空字段。按下提交按钮时,应检查系统是否仍有空字段。所以情况现在可能是这样的:
[{
"name": "Alex",
"code": "05422180283",
"pIva": "05422180283",
"subCode": null
}, {
"name": "John",
"code": "88985556",
"pIva": "1919ASVVV",
"subCode": "9991VVVV"
}, {
"name": "Billy",
"code": "89952366555",
"pIva": "BB588918989",
"subCode": "ASA234434"
}, {
"name": "Tom",
"code": null,
"pIva": "541198198",
"subCode": "ACEVV9999"
}]
如您所见,有2个空字段。在这种情况下,系统应该建议用户有2个空字段。 (带有警报或类似的东西)。否则,用户可以毫无问题地提交表单。这就是我到目前为止所做的:
angular.forEach($scope.myArray, function(items){
if(_.chain(items).find(_.isNull).isNull().value()) {
//console.log('Found one');
formHasEmptyFields = true;
} else {
//console.log('Did not find one');
formHasEmptyFields = false;
}
if(_(items).find(_.isNull) === null) {
//console.log('Found one');
formHasEmptyFields = true;
} else {
//console.log('Did not find one');
formHasEmptyFields = false;
}
});
if(formHasEmptyFields == true) {
alert('There are empty fields');
} else {
submitFunction($scope.myArray);
}
但它不起作用,因为它似乎只检查最后一个对象。事实上,如果我填写表单中的最后一个对象,它不会向我显示警报。任何的想法? $scope.myArray
当然是我的对象数组
答案 0 :(得分:1)
请参阅data
的{{3}}
some
你可以做各种各样的事情,比如过滤掉没有代码的项目
const hasItemWhithFalsyCode = items.some(x => !x.code);
明确检查const itemsWithTruthyCode = items.filter(x => x.code);
null
答案 1 :(得分:1)
问题在于,当formHasEmptyFields
时,true
设置为null
,但会再次被false
覆盖下一次迭代。
因此,要解决此问题,只需在循环之前和循环内设置formHasEmptyFields = false;
一次,只保留将其设置为true
的代码。
话虽如此,some
或every
方法对于此方案比forEach
循环更有用。您可能想要使用它。