2016-11-16 105 views
0

我在javascript中有這個對象數組。當滿足某些條件時從這個對象數組中刪除對象

var array = [ { DATA_ID: 1, 
    DATA_NAME: 'XX', 
    DATA_GROUP: 2313, 
    CODE_NO: 1 }, 
    { DATA_ID: 6, 
    DATA_NAME: 'YY', 
    DATA_GROUP: 4213, 
    CODE_NO: 2 }, 
    { DATA_ID: 4, 
    DATA_NAME: 'ZZ', 
    DATA_GROUP: 2123, 
    CODE_NO: 3 }, 
    { DATA_ID: 8, 
    DATA_NAME: 'ZZ', 
    DATA_GROUP: 2123, 
    CODE_NO: 3 } ] 

我想從對象的數組中刪除對象當地產CODE_NO === 3

結果會是這樣的;

[ { DATA_ID: 1, 
    DATA_NAME: 'XX', 
    DATA_GROUP: 2313, 
    CODE_NO: 1 }, 
    { DATA_ID: 6, 
    DATA_NAME: 'YY', 
    DATA_GROUP: 4213, 
    CODE_NO: 2 } 
] 

我使用Node.js的V6

+1

向我們展示一些代碼,你試圖做到這一點? – aring

+1

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter – Satpal

回答

1

您可以通過array.filter做簡單的Java腳本操作:

var arr = [ { DATA_ID: 1, 
 
    DATA_NAME: 'XX', 
 
    DATA_GROUP: 2313, 
 
    CODE_NO: 1 }, 
 
    { DATA_ID: 6, 
 
    DATA_NAME: 'YY', 
 
    DATA_GROUP: 4213, 
 
    CODE_NO: 2 }, 
 
    { DATA_ID: 4, 
 
    DATA_NAME: 'ZZ', 
 
    DATA_GROUP: 2123, 
 
    CODE_NO: 3 }, 
 
    { DATA_ID: 8, 
 
    DATA_NAME: 'ZZ', 
 
    DATA_GROUP: 2123, 
 
    CODE_NO: 3 } ] 
 

 
var res =arr.filter(function(elem){ 
 

 
    if (elem.CODE_NO != 3) 
 
    return elem 
 
}) 
 
console.log(res)

+1

優雅的代碼!我寫了一些冗長的代碼,直到我看到你的答案。輝煌! Upvoted。 – user781486

1

**使用此:**

let array = 
    [ { DATA_ID: 1, 
     DATA_NAME: 'XX', 
     DATA_GROUP: 2313, 
     CODE_NO: 1 }, 
     { DATA_ID: 6, 
     DATA_NAME: 'YY', 
     DATA_GROUP: 4213, 
     CODE_NO: 2 }, 
     { DATA_ID: 4, 
     DATA_NAME: 'ZZ', 
     DATA_GROUP: 2123, 
     CODE_NO: 3 }, 
     { DATA_ID: 8, 
     DATA_NAME: 'ZZ', 
     DATA_GROUP: 2123, 
     CODE_NO: 3 } ]; 

     for (var key in array){ 
      if(array[key].CODE_NO==3){ 
      delete array[key]; 
      } 
     } 
1

如果已經有Ramda項目依賴項,我會發佈一個「替代」解決方案。 @asdf_enel_hak的例子是很棒的錢包JS,所以如果你不需要額外的折扣,那就用這個例子吧。

基於Ramda解決方案:

// complement is like logical not, if value is true returns false and on true returns false 
// it does not return boolean value but new function 
const codeIsNot3 = R.complement(
    R.propEq("CODE_NO", 3) // Property based equal check, without R.complement it would return all objects where code_no is 3 
); 
R.filter(codeIsNot3, arr); 
+0

函數式編程看起來不錯。但是我需要一些時間來理解代碼。代碼很短,但對於像我這樣的人來說並不容易理解。 – user781486

+1

這是真的,添加了更多關於所使用功能的評論,ramda文檔也是接下來的好地方。 –

0

此代碼將工作。訣竅在於使用array.splice(i,1)刪除有問題的對象。

for (let i=0;i< array.length; i++ ){ 
     if (array[key].CODE_NO===3){    
     array.splice(i,1); 
     } 
    } 

array是張貼在您的問題的數組。

相關問題