多维数组中的数据操作

问题描述 投票:0回答:1

我有一个多维数组,它包含 5 个数组,这 5 个数组中的每一个都包含不同数量的数组。例如,索引 # 0 处的数组包含 99 个相同长度的数组,索引 # 1 处的数组包含 300 个相同长度的数组。所有这些数组都包含由一个包含 27 个元素的数组组成的组合。现在我想从所有五个数组中获取单个组合,并获得一个长度为 5 的多维数组,该数组的元素数量与包含 27 个元素的原始数组相同。

我尝试过使用 for 循环,但在所有 5 个位置对每个组合进行索引,以获得 5 个数组的数组,这些数组的元素总共等于原始数组,但迭代量太多。有没有更好的方法来做到这一点。

javascript arrays sorting
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.