我有以下对象数组:
[{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"...}]
我想过滤对象数组并只保留两个键id
和value
来得到这样的结果:
[{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仅提取值,而不是密钥。
答案 0 :(得分:7)
Array#filter
过滤出数组中的各个项目,而不是来自数组中对象的某些键。您可以使用方法Array#map
转换对象并仅保留所需的键。 map
旨在将数组的每个元素转换为新的元素,将旧值“映射”为新值:
let newPetList = PetList.map(pet => ({
id: pet.id,
value: pet.value
}));
以上遍历数组,并将当前对象存储在pet
中。然后它从arrow function返回一个新对象,该对象将是newPetList
中相应的转换对象,只有id
中的value
和pet
。结果是旧数组中的所有对象都映射到没有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);