我需要迭代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]]发布于 2019-10-05 05:18:20
你可以自由地使用Sets。首先,将每个内部列表转换成一个集合,这样你就可以快速检查其中是否有一个数字。接下来,您可以在所有列表中创建一个包含所有数字的集合,并根据每个数字是否包含在前面创建的每个“内部列表集合”中来获取所需的列表:
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对原始数组中的每个内部列表进行线性时间检查。
https://stackoverflow.com/questions/58243183
复制相似问题