首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在多个javascript数组中查找匹配项并输出重复数组

在多个javascript数组中查找匹配项并输出重复数组
EN

Stack Overflow用户
提问于 2020-12-31 19:21:57
回答 2查看 52关注 0票数 0

我只想根据数组中的第一个值查找多个数组之间的匹配,并保留匹配结果。

代码语言:javascript
运行
复制
[
    [[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

并希望生成以下数组,其中包含来自所有给定数组的匹配项:

代码语言:javascript
运行
复制
[
    [[11,1], [22,2]],
    [[11,1], [22,1]],
    [[11,10], [22,1]]
]

我刚刚尝试了javascript reduce函数,但无法解决这个问题,也得不到预期的结果。

EN

回答 2

Stack Overflow用户

发布于 2020-12-31 19:34:30

您可以首先过滤通用值,然后将结果与过滤后的数组进行映射。

代码语言:javascript
运行
复制
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);

票数 3
EN

Stack Overflow用户

发布于 2021-01-01 01:15:58

首先,构建一个track对象,使其具有数量和出现次数。

然后,无论第一个数字是否重复,都对data执行filter

代码语言:javascript
运行
复制
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)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65520204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档