javascript - 根据另一个列表中的内容过滤对象列表的最简单方法是什么?
问题描述
我写了太多行来比较,然后根据两者中的内容过滤对象列表。我怎样才能简化它?
const list1 = [{ name: 'John' }, { name: 'Marie' }, { name: 'Carl' }, ]
const list2 = [{ firstName: 'John' }, { firstName: 'Peter' }, { firstName: 'Carl' }, ]
期望的结果:[{ name: 'John' }, { name: 'Carl' }]
注意:获取list1
其中键为 的对象name
。
解决方案
为此,请使用Array#filter和Array#some。过滤来自 arr1 的每个对象,其中对于 arr2 的至少一个元素,名称等于 firstName。
const list1 = [{ name: 'John' }, { name: 'Marie' }, { name: 'Carl' }, ]
const list2 = [{ firstName: 'John' }, { firstName: 'Peter' }, { firstName: 'Carl' }, ]
let res = list1.filter(({name}) => list2.some(({firstName}) => name==firstName));
console.log(res);
推荐阅读
- ansible - 是否可以使用 Ansible playbook 遍历节点机器上的多个文件并搜索 n 替换特定行
- javascript - 为什么在 javascript 中使用 if(!!obj){} 而不是 if(obj){}
- python - 将复杂的分层 JSON 转换为 CSV
- ruby - 无法更新 Gemfile
- bash - 是否可以将变量从 BASH 脚本传递到 Linux 上的 PWSH
- html - flex-direction:行不工作;它仍然显示为一列
- linux - Perl 中的 Rsync system() 执行随机失败并出现协议错误
- git - Git 从具有历史记录的远程分支签出文件
- linux - 依次传递两个变量
- excel - 数组中的vba工作表名称但不显示