繁体   English   中英

过滤对象数组但仅返回特定属性 - JS

[英]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

您可以使用filtermap来做到这一点;

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

使用.filter().map()函数:

 let arr = [{name:"lala", id: 1}, {name: "coco", id:2}, {name: "lala", id:3}] let newArr = arr.filter((elm) => (elm.name === 'lala')).map( (elm) => {return {id:elm.id}}); console.log(newArr);


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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM