javascript - 将对象数组与值数组匹配
问题描述
如果我有 2 个数组:
arr1: ["1","2"]
arr2: [{id: 1, color: "green"}, {id: 2, color: "yellow"}, {id: 3, color: "red"}]
我想获得:
result: [{id: 1, color: "green"}, {id: 2, color: "yellow"}]
我正在尝试
arr2.filter(
e => arr1.indexOf(e.id) !== -1
);
但结果是空的。
解决方案
您可以使用Array.prototype.filter()
withArray.prototype.some()
方法来获得结果。
const arr1 = ['1', '2'];
const arr2 = [
{ id: 1, color: 'green' },
{ id: 2, color: 'yellow' },
{ id: 3, color: 'red' },
];
const ret = arr2.filter((x) => arr1.some((y) => +y === x.id));
console.log(ret);
另一种使用Set Object
.
const arr1 = ['1', '2'];
const arr2 = [
{ id: 1, color: 'green' },
{ id: 2, color: 'yellow' },
{ id: 3, color: 'red' },
];
const set = new Set(arr1);
const ret = arr2.filter((x) => set.has(x.id.toString()));
console.log(ret);
推荐阅读
- javascript - 无法访问 $http.get 在指令中设置的范围属性
- r - 在 Quantstrat for R 中创建投资组合时导致此错误消息的原因是什么?
- path - 使用 AppleScript 的带有空格和连字符“-”的路径
- python - 如何编写一个 python 程序来打印用逗号分隔的一串数字的总和?
- swift - Swift 中的编码概率
- reactjs - 如何在 d3.js 中删除 x 轴的末端
- javascript - 为什么 backgroundimage 在 chrome 中不是 cssImageValue?我如何使用画布处理背景图像但不制作新图像?
- javascript - Vue 添加到现有会话存储阵列
- sqlite - 如何使用 SQLite CLI 的“--skip 1”选项?
- firebase - futureBuilder 无法从快照中获取数据