多维数组元素个数的统计

zizxzy
  • 158

请问如何统计一个多维数组的元素个数,要求统计的是[1,3] [2,4]这样的值

count([[[1,3],[2,4]],[[8,7],[9,6]]]) = 4
回复
阅读 1.2k
3 个回答
✓ 已被采纳

这个问题涉及到展开层次。

如果展开一层,得到的是

[[1, 3], [2, 4], [8, 7], [9, 6]]

如果展开两层,得到的是

[1, 3, 2, 4, 8, 7, 9, 6]

看你的要结果并不是完全展开,所以 count 按理说会有一个层次参数。

function count(arr, depth = 1) {
    return arr.flat(depth).length;
}

const origin = [[[1, 3], [2, 4]], [[8, 7], [9, 6]]];
console.log(count(origin)); // 4
console.log(count(origin, 2)); // 8

数叶子元素, 到叶子元素时判断一下, 像这样:

function countSpecificLeafNodes(arr) {
  let count = 0;
  for (let i = 0; i < arr.length; i++) {
    // 是数组的话
    if (Array.isArray(arr[i])) {
      // 看看两子元素是不是数字
      if (
        arr[i].length == 2 &&
        typeof arr[i][0] === "number" &&
        typeof arr[i][1] === "number"
      ) {
        count++;
      } else {
        // 不是就继续数
        count += countSpecificLeafNodes(arr[i]);
      }
    }
  }
  return count;
}

如下图:

image.png

柯楠
  • 1.2k
/* 计算所传参数包含多少个一维数组 */
function count(arr) {
    if (Array.isArray(arr)) {
        if (!arr.some(Array.isArray)) return 1;
        return arr.reduce((r, n) => r + count(n), 0);
    }
    return 0;
}
console.dir(count([[1, 3, 2, 4], [8, 7, 9, 6]]));
console.dir(count([[1, 3], [2, 4], [8, 7], [9, 6]]));
console.dir(count([[[1, 3], [2, 4]], [[8, 7], [9, 6]]]));
console.dir(count([[[1, 3], [2], [4]], [[[8, 7]], [9, 6]]]));
宣传栏