首页 > 解决方案 > 过滤并创建一个新数组

问题描述

我有一个对象,如下所示:

var obj = [
            {id: 1, name: 'AD', key: 10}, 
            {id: 2, name: 'AD', key: 20},
            {id: 3, name: 'BD', key: 30},
            {id: 4, name: 'CD', key: 40}
         ];

我想过滤并创建一个满足任何条件的新数组。例如:过滤名称为“AD”并创建一个新的键数组:

[10, 20]

试过.map

obj.map(ele => {
  return ele.name === 'AD' ? ele.key : null;
}); //it adds even nulls in the result array as [10, 20, null, null]

试过.filter:

obj.filter(ele => {
   return ele.name === 'AD' ? ele.key : null;
});

Result: [{id: 1, name: "AD", key: 10}, {id: 2, name: "AD", key: 20}] //gives array of objects, not what I'm expecting.

提前致谢

标签: javascriptarraysfilter

解决方案


先过滤数组,然后映射得到值:

obj.filter(e => e.name === 'AD').map(e => e.key)

另一个选项是 flatmap(在此处检查浏览器兼容性)

obj.flatMap(e => e.name === 'AD' ? [e.key] : [])

推荐阅读