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

Looking for suggestions on how to compare multiple arrays in javascript

我需要遍历 n 个数组和 n 个项目,找到每个数组中的匹配项,用这些项目创建一个新数组,如果没有任何数组的项目匹配,那就是未定义,对于每个不匹配的数组,在新数组中。

我可以使用 2 个数组执行此操作,但正在寻找有关如何对任何数字执行此操作的建议。我没有必要找你编码,只是一些关于如何解决问题的建议

const one = [[1,2,3,4,5],[3,4,5,6,7,8], [3,4,5,9,10]]

结果应该是这样

[[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]]

您可以自由使用 Set。首先,将每个内部列表转换为一个集合,以便您可以快速检查数字是否在其中。接下来,您可以创建一组所有列表中的所有数字,并且对于每个数字,根据它是否包含在之前创建的每个 "inner-list set" 中来获取您想要的列表:

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);

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