我有一个多维数组,它包含 5 个数组,这 5 个数组中的每一个都包含不同数量的数组。例如,索引 # 0 处的数组包含 99 个相同长度的数组,索引 # 1 处的数组包含 300 个相同长度的数组。所有这些数组都包含由一个包含 27 个元素的数组组成的组合。现在我想从所有五个数组中获取单个组合,并获得一个长度为 5 的多维数组,该数组的元素数量与包含 27 个元素的原始数组相同。
我尝试过使用 for 循环,但在所有 5 个位置对每个组合进行索引,以获得 5 个数组的数组,这些数组的元素总共等于原始数组,但迭代量太多。有没有更好的方法来做到这一点。
function keepDistinctValuesAcrossArrays(arr) {
const valueOccurrences = new Map();
// iterate all values and count occurrences of each value
arr.forEach((subArray) => {
subArray.forEach((innerArray) => {
innerArray.forEach((value) => {
const count = valueOccurrences.get(value) || 0;
valueOccurrences.set(value, count + 1);
});
});
});
// Filter values that occur only once (distinct across all arrays)
const distinctValues = Array.from(valueOccurrences.entries())
.filter(([value, count]) => count === 1)
.map(([value]) => value);
// Filter distinct values in each subarray
const distinctArrays = arr.map((subArray) => {
return subArray.map((innerArray) => {
return innerArray.filter((value) => distinctValues.includes(value));
});
});
// Finally remove out empty arrays if there are any.
return distinctArrays.map((subArray) => subArray.filter(item => item.length > 0))
}
const multiDimArray = [
[
[1, 2],
[1, 3],
[4, 9],
],
[
[5, 6, 1],
[3, 1, 2],
[8, 19, 10],
],
];
const distinctValuesArray = keepDistinctValuesAcrossArrays(multiDimArray);
console.log(JSON.stringify(distinctValuesArray));