检查object中的值是null还是空javascript

时间:2017-06-06 08:52:23

标签: javascript jquery angularjs forms

这是我的问题:我可以拥有这个对象数组:

[{
    "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当然是我的对象数组

2 个答案:

答案 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的代码。

话虽如此,someevery方法对于此方案比forEach循环更有用。您可能想要使用它。