首页 > 解决方案 > JavaScript:垂直遍历多维数组

问题描述

我有多维数组,我需要垂直计算字符。按行计数没问题,但我不能像垂直那样迭代它。请给小费。

const arrayData = [
  ['a', 'b', 'c'],
  ['a', 'f', 'g'],
  ['b']
];

我的代码如下所示:

  const countChars = (input, direction) => {
    if (direction === 'row') {
      return input.reduce((acc, curr) => {
        acc[curr] = acc[curr] ? ++acc[curr] : 1;
        return acc;
      }, {});
    }

    if (direction === 'column') {
      for (let row = 0; row < input.length; row++) {
        for (let column = 0; column < input[row].length; column++) {
          console.log(input[column][row]);
        }
        console.log('---');
      }
    }
  }

但是对于列,我得到了这个结果:

a
a
b
---
b
f
undefined
---
c

所以我因为未定义而失去了一个字符。

结果应该类似于列:

{ 'a': 2, 'b': 1 }
{ 'b': 1, 'f': 1 }
{ 'c': 1, 'g': 1 }

标签: javascriptarraysloopsmultidimensional-arraycount

解决方案


您可以迭代数组并在同一索引处收集相同的值。

const
    array = [['a', 'b', 'c'], ['a', 'f', 'g'], ['b']],
    result = array.reduce((r, a) => {
        a.forEach((v, i) => {
            r[i] = r[i] || {};
            r[i][v] = (r[i][v] || 0) + 1;
        });
        return r;
    }, []);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读