javascript - 过滤并创建一个新数组
问题描述
我有一个对象,如下所示:
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)
另一个选项是 flatmap(在此处检查浏览器兼容性)
obj.flatMap(e => e.name === 'AD' ? [e.key] : [])
推荐阅读
- postgresql - Postgres - 访问 pg_config_manual.h 文件或使用 Docker 修改“NAMEDATALEN”值
- google-sheets-formula - 如何在importrange中添加“order by”
- javascript - 如何以速度和颜色移动盒子动画
- python - 抓取 NBA.com 个人球员对决头对头统计页面(涵盖多个页面)
- c++ - 尽管设置了标志 DOPENCV_ENABLE_NONFREE=ON,但运行 opencv 获得专利的 SIFT 和 SURF 的问题
- r - 使用具有 11 个迷你数据集的向量进行 R 循环
- ios - 在集合视图中应用包含所有新数据的快照后,可区分数据源滚动到顶部
- python - 将数据框中的第一行添加到列标题
- python - 套接字在 VSCode 中按预期运行,但在终端发送后关闭
- linux - 使用 seccomp 配置文件从 C 运行进程