2016-11-16 4 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:

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

Элегантный код! Я писал какой-то длинный код, пока не увидел ваш ответ. Brilliant! 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

Я отправлю «альтернативное» решение, если уже есть зависимость проекта от Рамды. Пример @asdf_enel_hak - отличный кошелек JS, поэтому, если вам не нужны дополнительные deps, используйте этот пример.

решение на основе 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 docs - отличное место для следующего. –

0

Этот код будет работать. Хитрость заключается в использовании array.splice(i,1) для удаления объекта.

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

array это массив, размещенный в вашем вопросе.