javascript - 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 }
解决方案
您可以迭代数组并在同一索引处收集相同的值。
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; }
推荐阅读
- javascript - Firebase user.linkWithCredential 不是函数
- javascript - 使用 Deno 和 Oak 处理多部分/表单数据
- vb.net - 访问更新查询不更改值
- ruby-on-rails - 在 ruby on rails 中保留特定路线而不影响并设计
- java - Elastic Beanstalk、Java Spring Boot 和 RDS 多可用区部署
- java - 如何更改我的代码,这样我就不必使用“break”?
- fortran - 如何在蒙特卡洛将 N 从 10 个随机点增加到 10^8 点
- php - Laravel HTTP 测试 - 确保 JSON 响应在数组中具有特定值
- c - 访问命令行参数时出现分段错误 ~ CS50
- arrays - 如何根据查询条件从数组中检索所有对象?