【问题标题】:Remove objects from this array of object when certain criteria is met [closed]满足某些条件时从此对象数组中删除对象[关闭]
【发布时间】:2017-03-30 07:18:28
【问题描述】:

我在 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

【问题讨论】:

标签: arrays json node.js javascript-objects


【解决方案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)

【讨论】:

  • 优雅的代码!在看到您的答案之前,我一直在写一些冗长的代码。杰出的!赞成。
【解决方案2】:

**使用这个:**

    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];
          }
       }

【讨论】:

    【解决方案3】:

    如果已经存在 Ramda 项目依赖项,我将发布一个“替代”解决方案。 @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);
    

    【讨论】:

    • 函数式编程看起来不错。但是我需要一些时间来理解代码。代码很短,但对我这样的人来说并不容易理解。
    • 是的,添加了更多关于所用函数的 cmets,ramda docs 也是下一步的好去处。
    【解决方案4】:

    此代码将起作用。诀窍在于使用array.splice(i,1) 删除有问题的对象。

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

    array 是您问题中发布的数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-07
      • 2018-05-05
      • 1970-01-01
      • 2020-09-08
      • 1970-01-01
      • 2020-07-15
      相关资源
      最近更新 更多