2017-06-06 70 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