寻找有关如何在 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
进行线性时间检查。
我需要遍历 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
进行线性时间检查。