javascript - 过滤并创建一个新数组

标签 javascript arrays filter

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

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.

提前致谢

最佳答案

先过滤数组,然后映射获取值:

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

另一个选项是平面 map (检查浏览器兼容性 here )

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

关于javascript - 过滤并创建一个新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57523425/

相关文章:

javascript - 如何将嵌套对象转换为javascript中的数组?

php - 引用 - 这个错误在 PHP 中意味着什么?

C++ 如何使以有序方式读取和存储 100 个字符的二维数组 [500][500] 成为可能?

c - 如何计算双二阶滤波器系数?

javascript - 带有加号的加号/减号计数器(jquery)

javascript - Anchor需要点击两次才能在js中执行操作

javascript - jQuery .animate 动画 div 但不是里面的图像

c - 用C中的空格替换字符数组中的制表符

Xpath:过滤掉 child

arrays - 通过比较数组进行ElasticSearch 5.1过滤