首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >寻找有关如何在javascript中比较多个数组的建议

寻找有关如何在javascript中比较多个数组的建议
EN

Stack Overflow用户
提问于 2019-10-05 05:04:29
回答 1查看 44关注 0票数 0

我需要迭代n个数组中的n个项,找到每个数组中的匹配项,创建一个包含这些项的新数组,如果没有任何项与新数组中的任何数组匹配,这将是未定义的,对于新数组中不匹配的每个数组。

我可以用2个数组做到这一点,但我正在寻找关于如何对任何数字做到这一点的建议。我没有必要寻找你编码它,只是如何解决这个问题的一些建议

代码语言:javascript
运行
复制
const one = [[1,2,3,4,5],[3,4,5,6,7,8], [3,4,5,9,10]]

结果应该是这样的

代码语言:javascript
运行
复制
[[1,undefined,undefined], [2,undefined,undefined], [3,3,3],[4,4,4],[5,5,5], [undefined,6,undefined], [undefined, 7,undefined], [undefined, 8, undefined],[undefined,undefined,9], [undefined,undefined,10]]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-05 05:18:20

你可以自由地使用Sets。首先,将每个内部列表转换成一个集合,这样你就可以快速检查其中是否有一个数字。接下来,您可以在所有列表中创建一个包含所有数字的集合,并根据每个数字是否包含在前面创建的每个“内部列表集合”中来获取所需的列表:

代码语言:javascript
运行
复制
const one = [
  [1, 2, 3, 4, 5],
  [3, 4, 5, 6, 7, 8],
  [3, 4, 5, 9, 10]
];

const sets = one.map(arr => new Set(arr));
const allNumbers = new Set(one.reduce((acc, curr) => {
  acc.push(...curr);
  return acc;
}, []));

const result = [...allNumbers].map(n => sets.map(s => s.has(n) ? n : undefined));
console.log(result);

权衡的是,集合列表会占用额外的内存(与原始的2-d数组本身一样多)。如果这是不可接受的,你可以跳过它,并使用includes对原始数组中的每个内部列表进行线性时间检查。

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

https://stackoverflow.com/questions/58243183

复制
相关文章

相似问题

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