2017-06-06 43 views
0

这是我的问题:我能有这样的对象数组:检查的对象值为null或空的JavaScript

[{ 
    "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个空字段。在这种情况下,系统应该建议用户有两个空的字段。 (带有警报或类似的东西)。否则,用户可以毫无问题地提交表单。这是我迄今为止所做的:

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

能不能请你附上你的html表格 –

回答

1

问题是,虽然formHasEmptyFields确实设置为true当有null时,它会在下一次迭代中再次被false覆盖。

因此,要解决这个问题,只需设置formHasEmptyFields = false;一次,循环前和循环内部,只保留将其设置为true的代码。

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

+0

那么,你主要是想删除其他条件? –

+0

确实,放下它们。 – trincot

+0

是的,它的工作原理!你是对的!谢谢! –

1

MDN docssome

const hasItemWhithFalsyCode = items.some(x => !x.code); 

你可以做各种东西,比如过滤掉的物品无码

const itemsWithTruthyCode = items.filter(x => x.code); 

显式地检查对于null

const hasItemWhithNullCode = items.some(x => x.code === null); 
+0

确实,在这种情况下,使用'some'比'forEach'更好:只要有一定的条件,它就会退出循环。如果您要为他们的案例专门提供代码,那么对于OP来说会很有用。 – trincot