我只想根据数组中的第一个值查找多个数组之间的匹配,并保留匹配结果。
[
[[11,1], [22,2], [33,3]],
[[11,1], [10,1], [22,1]],
[[11,10], [12,1], [22,1]]
]上面是我的样本数组。首先,这些数组中的唯一值是11, 22, 33, 10, 12,因此在所有三个数组中重复其中的11, 22。
并希望生成以下数组,其中包含来自所有给定数组的匹配项:
[
[[11,1], [22,2]],
[[11,1], [22,1]],
[[11,10], [22,1]]
]我刚刚尝试了javascript reduce函数,但无法解决这个问题,也得不到预期的结果。
发布于 2020-12-31 19:34:30
您可以首先过滤通用值,然后将结果与过滤后的数组进行映射。
const
data = [
[[11, 1], [22, 2], [33, 3]],
[[11, 1], [10, 1], [22, 1]],
[[11, 10], [12, 1], [22, 1]]
],
common = data.reduce((a, b) => a.filter(([v]) => b.some(([w]) => v === w))),
result = data.map(a => a.filter(([v]) => common.some(([w]) => v === w)));
console.log(common);
console.log(result);
发布于 2021-01-01 01:15:58
首先,构建一个track对象,使其具有数量和出现次数。
然后,无论第一个数字是否重复,都对data执行filter。
const data = [
[[11,1], [22,2], [33,3]],
[[11,1], [10,1], [22,1]],
[[11,10], [12,1], [22,1]]
];
const track = {};
data.flat().forEach(([num]) => track[num] = (track[num] ?? -1) + 1)
const new_data = data.map(arr => arr.filter(([num]) => track[num]))
console.log(new_data)
https://stackoverflow.com/questions/65520204
复制相似问题