【问题标题】:javascript remove all objects from array based on property value [duplicate]javascript根据属性值从数组中删除所有对象[重复]
【发布时间】:2019-01-14 09:39:42
【问题描述】:

如何根据属性值从数组中删除所有对象?

function removeByKey(array, fieldName){
        array.some(function(item, index) {
            return (array[index].name === fieldName) ? !!(array.splice(index, 1)) : false;
        });
        return array;
    }
    
    const myarr = [
      {
        name: 'foo',
        school: 'hoo'
      },{
        name: 'foo',
        school: 'xooo'
      },{
        name: 'bar',
        school: 'xooo'
      }
    ];
    
    console.log(removeByKey(myarr, 'foo'))

在上面的代码中,它只是删除了其中一个对象。如果匹配,如何删除所有内容?

【问题讨论】:

  • 将 !! 更改为 !

标签: javascript arrays ecmascript-6


【解决方案1】:

为什么不使用filterMDN?

const myarr = [
  {
    name: 'foo',
    school: 'hoo'
  },{
    name: 'foo',
    school: 'xooo'
  },{
    name: 'bar',
    school: 'xooo'
  }
];

const filteredArray = myarr.filter(obj => obj.name !== 'foo');

示例:https://repl.it/repls/SimultaneousSentimentalForms

编辑以匹配评论。

【讨论】:

  • 我的意思是,我需要删除而不是保留匹配项。
  • ... 然后obj.name !== 'foo' .... @storis 我编辑了我的答案以符合您的需要。
【解决方案2】:

您可以为此使用过滤器功能:

function removeByKey(arr, propertyValue) {

  return arr.filter(item => item.name !== propertyValue);

}

const myarr = [
  {
    name: 'foo',
    school: 'hoo'
  },{
    name: 'foo',
    school: 'xooo'
  },{
    name: 'bar',
    school: 'xooo'
  }
];

console.log(removeByKey(myarr, 'foo'));

更通用的 removeByKey 函数将是:

function removeByKey(arr, propertyName, propertyValue) {

  return arr.filter(item => item[propertyName] !== propertyValue);

}
const myarr = [
  {
    name: 'foo',
    school: 'hoo'
  },{
    name: 'foo',
    school: 'xooo'
  },{
    name: 'bar',
    school: 'xooo'
  }
];

console.log(removeByKey(myarr, 'name', 'foo'));

【讨论】:

    猜你喜欢
    • 2016-11-08
    • 2012-05-17
    • 2020-06-29
    • 2015-12-07
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    相关资源
    最近更新 更多