[英]Filter array of objects but return only specific properties - JS
如何过滤具有条件的对象数组并仅返回过滤对象的特定属性?
我知道我们可以使用 filter 后跟 map 来实现这一点。 但我正在寻找更简单的解决方案。
例如: let arr = [{name:"lala", id: 1}, {name: "coco", id:2}, {name: "lala", id:3}]
假设我只想要名称为“lala”的 id。
Output 应该是,
[{id: 1}, {id: 3}]
您可以简单地使用Array.prototype.reduce
在同一操作中结合映射和过滤。 如果你想让它超级简洁,你可以在 reduce 回调的第二个参数中使用 object 解构:
let arr = [{name:"lala", id: 1}, {name: "coco", id:2}, {name: "lala", id:3}]; let filteredMappedArr = arr.reduce((acc, { name, id }) => { if (name === 'lala') acc.push({ id }); return acc; }, []); console.log(filteredMappedArr);
下一个最简单的方法是减少
let arr = [{name:"lala", id: 1}, {name: "coco", id:2}, {name: "lala", id:3}]; console.log( arr.reduce((values, value) => { if (value.name === 'lala') values.push({ id: value.id }); return values; }, []) );
filter
后跟map
可能是最易读的解决方案,但是如果您希望一步完成所有操作,则可以查看经典for
循环或使用reduce
。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce
您可以使用filter
和map
来做到这一点;
let arr = [{name:"lala", id: 1}, {name: "coco", id:2}, {name: "lala", id:3}] let res = arr.filter(item => item.id % 2 === 1).map(item => ({id: item.id})) console.log(res);
您可以使用Array#flatMap
并返回一个新的对象或一个没有展平值的空数组。
let array = [{ name: "lala", id: 1 }, { name: "coco", id: 2 }, { name: "lala", id: 3 }], result = array.flatMap(({ id, name }) => name === 'lala'? [{ id }]: []); console.log(result);
let arr = [
{ name: "lala", id: 1 },
{ name: "coco", id: 2 },
{ name: "lala", id: 3 },
];
let a = [];
arr.filter(({ name, id }) => {
if (name === "lala") {
a.push({ id });
}
});
console.log(a);
使用过滤器,我们检查名称匹配“lala”的条件,如果是,那么我们将 id 推送到新数组......这很简单
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.