从数组中的所有对象中删除键

时间:2017-06-03 21:51:35

标签: javascript arrays object ecmascript-6

我有以下对象数组:

[{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仅提取值,而不是密钥。

2 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:3)

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



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);