【发布时间】:2019-04-13 02:31:55
【问题描述】:
假设我有一个由嵌套数组组成的“矩形网格”,如下所示:
let board = [
['a0', 'a1', 'a2', 'a3', 'a4'],
['b0', 'b1', 'b2', 'b3', 'b4'],
['c0', 'c1', 'c2', 'c3', 'c4'],
['d0', 'd1', 'd2', 'd3', 'd4'],
];
我正在尝试遍历其列,因此结果将类似于'a0', 'b0', 'c0', 'd0', 'a1'... etc。
当然,我可以使用旧的 for 循环来做到这一点:
const iterateAcrossColumnsES5 = () => {
for (let i = 0; i < board[0].length; i++) {
for (let j = 0; j < board.length; j++) {
console.log(board[j][i]);
}
}
}
但我喜欢尝试让它更像 ES6 一样简洁易读。我正在尝试使用 for.. of 和/或 for.. in 循环,但我只得到了:
const iterateAcrossColumnsES6 = () => {
for (let [i, item] of Object.entries(board)) {
for(let row of board) {
console.log(row[i])
}
}
}
但它既不是 简洁 也不是 可读,而且它仅在 board 是“正方形”(父数组长度与其子项相同),否则我得到的迭代次数过多或不足。
有可能吗?我没有尝试使用map() 或forEach(),我很好。和他们一起,但我很好奇我是否只能使用for..of 或for..in。
【问题讨论】:
-
ES6 不是 ES5 的替代品,如果标准 for 循环有意义,请使用标准 for 循环。
-
@Keith 我同意,我只是好奇这是否可能。
-
您正在寻找
zip函数 (stackoverflow.com/questions/4856717/…),然后是firstCol = zip(...grid)[0] -
如果你只想控制台记录每个条目,那么 ->
for (let i of board) { for (let j of i) console.log(j); } -
@Keith 是的,我用它来迭代 rows ,但我需要迭代 columns。
标签: javascript arrays loops ecmascript-6 iteration