【问题标题】:Remove key from all objects in array从数组中的所有对象中删除键
【发布时间】:2017-11-05 01:00:04
【问题描述】:

我有以下对象数组:

[{id:1, value:"100", name:"dog" ...},
{id:2, value:"200", name:"cat" ...},
{id:3, value:"300", name:"fish"....},
{id:4, value:"400", name:"mouse" ...},
{id:5, value:"500", name:"snake"...}]

我想过滤对象数组并只保留两个键,idvalue 以获得这样的结果:

[{id:1, value:"100"},
{id:2, value:"200"},
{id:3, value:"300"},
{id:4, value:"400"},
{id:5, value:"500"}]

目前,我正在使用 for 循环遍历对象数组,并对带有新变量的空数组执行 push()。有没有更简单的方法来做到这一点?

我想像 _.pluck(PetList, 'id', 'value'); 一样使用 Lodash,但 lodash 只提取值,而不是键。

【问题讨论】:

  • 更多的是映射而不是过滤...

标签: javascript arrays object ecmascript-6


【解决方案1】:

Array#filter 过滤数组中的单个项目,而不是数组中对象的某些键。您可以使用方法Array#map 来转换对象并只保留您想要的键。 map 旨在将数组的每个元素转换为新值,将旧值“映射”到新值:

let newPetList = PetList.map(pet => ({ 
    id: pet.id,
    value: pet.value
}));

上面遍历数组,将当前对象存储在pet中。然后它从arrow function 返回一个新对象,该对象将是newPetList 中对应的转换对象,只有来自pet 的键idvalue。结果是旧数组中的所有对象都映射到没有name 键的新对象。

您还可以通过对象解构过滤放置不需要的属性,如下所示:

let newPetList = petList.map(({ name, ...rest }) => rest);

这会将name 属性绑定到name 并将其余部分保留在rest 中,您可以返回该属性以删除name 键。

【讨论】:

    【解决方案2】:

    您要实现的目标称为映射而不是过滤。这是一个解决方案

    var array = [{id:1, value:"100", name:"dog"},
    {id:2, value:"200", name:"cat"},
    {id:3, value:"300", name:"fish"},
    {id:4, value:"400", name:"mouse"},
    {id:5, value:"500", name:"snake"}];
    var result = array.map(function(obj) {
        return {id: obj.id, value: obj.value};
    });
    
    console.log(result);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-26
      • 2020-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多