【问题标题】:Loop through array of object and if property match, then slice that object - Javascript [duplicate]循环遍历对象数组,如果属性匹配,则对该对象进行切片 - Javascript [重复]
【发布时间】:2018-01-20 23:38:10
【问题描述】:

我有对象数组,我正在尝试遍历该数组,如果找到匹配项,我想对该对象进行切片..

var object = [
  {
    "Name": 'Kshitij',
    "LastName": 'Rangari',
    "CountryBorn": 'India',
    "CountryStay": 'USA'
  },

  {
    "Name": 'Pratik',
    "LastName": 'Rangari',
    "CountryBorn": 'India',
    "CountryStay": 'Canada'
  },

  {
    "Name": 'Pratibha',
    "LastName": 'Rangari',
    "CountryBorn": 'India',
    "CountryStay": 'India'
  },

  {
    "Name": 'Ankita',
    "LastName": 'Raut',
    "CountryBorn": 'India',
    "CountryStay": 'Australia'
  },

  {
    "Name": 'Wayne',
    "LastName": 'Rooney',
    "CountryBorn": 'UK',
    "CountryStay": 'UK'
  }

]

console.log(object);

object.forEach(function(x){
  if (x.Name==='Kshitij'){

  }
})

object.map (obj =>{

  obj.AllFirstName = obj['Name'];
  console.log(obj['AllFirstName']);

})

console.log('------------------------------')

console.log(object); 

我想遍历 Object 并想找到 Name === 'Kshitij'Name ==='Pratik',我想从数组中删除这些对象。

我该怎么做?

【问题讨论】:

标签: javascript arrays


【解决方案1】:

您可以使用返回一个过滤数组,它过滤掉数组中对象的给定键的所有给定值。

const without = (key, values) => object => !values.includes(object[key]);

var array = [{ Name: 'Kshitij', LastName: 'Rangari', CountryBorn: 'India', CountryStay: 'USA' }, { Name: 'Pratik', LastName: 'Rangari', CountryBorn: 'India', CountryStay: 'Canada' }, { Name: 'Pratibha', LastName: 'Rangari', CountryBorn: 'India', CountryStay: 'India' }, { Name: 'Ankita', LastName: 'Raut', CountryBorn: 'India', CountryStay: 'Australia' }, { Name: 'Wayne', LastName: 'Rooney', CountryBorn: 'UK', CountryStay: 'UK' }];

console.log(array.filter(without('Name', ['Kshitij', 'Pratik'])));
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 您将“要求”表述为“删除”过于认真,这导致您提出使用splice 的可怕建议,然后迫使您向后工作,或转其他筋斗.此外,您的逻辑似乎只删除了第一次出现。更不用说整个事情是由大约 18 个其他问题组成的。
  • @torazaburo,对,我很认真。而且我误读了这个问题,但是操作人员想要的只是后来才清楚。无论如何,现在过滤并使用直接的 fprward 方法。顺便说一句,被骗的目标太可怕了。
  • 好多了。 Wrt dup 目标,我对此也不满意,但是这个问题属于非常基本的类别,似乎没有一个干净的 dup,有点像关于如何在 JS 中添加两个数字的问题。
【解决方案2】:

使用内置过滤器删除与某个谓词匹配的所有项目。然后将原始对象设置为过滤列表。

var namesToRemove = ['Kshitij', 'Pratik'];
object = object.filter(e => !namesToRemove.includes(e.Name))

【讨论】:

  • “我想从数组中删除那些对象。” .filter() 返回一个新数组
【解决方案3】:

使用filter() 函数获取一个删除了对象的新数组 - 请参见下面的演示:

var object=[{"Name":'Kshitij',"LastName":'Rangari',"CountryBorn":'India',"CountryStay":'USA'},{"Name":'Pratik',"LastName":'Rangari',"CountryBorn":'India',"CountryStay":'Canada'},{"Name":'Pratibha',"LastName":'Rangari',"CountryBorn":'India',"CountryStay":'India'},{"Name":'Ankita',"LastName":'Raut',"CountryBorn":'India',"CountryStay":'Australia'},{"Name":'Wayne',"LastName":'Rooney',"CountryBorn":'UK',"CountryStay":'UK'}];

var result = object.filter(function(e){
  return e.Name !== 'Kshitij' && e.Name !=='Pratik'
});

console.log(result);
.as-console-wrapper{top:0;max-height:100%!important;}

【讨论】:

  • “我想从数组中删除那些对象。” .filter() 返回一个新数组
  • 是的,已编辑答案以反映...
猜你喜欢
  • 2014-02-21
  • 2016-07-08
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
  • 2019-12-16
  • 2021-11-20
  • 1970-01-01
相关资源
最近更新 更多