我有这个数组:
rows = [ [ 89, 18, 9 ], [ 1903, 3, 4 ], [ 3, 1, 800 ] ];
它应该是这样的:
[ [ 89, 1903, 3 ], [ 18, 3, 1 ], [ 9, 4, 800 ] ]
正在运行的代码如下所示:
rows[0].map((_, columnIndex) => rows.map(
row => row[columnIndex])
);
这是如何运作的?
答案 0 :(得分:1)
+--- The outter function map gets the first array to loop through the rows
[ 89, 18, 9 ] |
[ 1903, 3, 4 ] |
[ 3, 1, 800 ] v
+--->
|
+- The nested function map is looping through the columns.
The key here is the fixed column using index (column[index])
from the outter function map, so every iteration from the outter
function map will fix the access to that column, i.e -
index = 0 will access the array as follow: array[j][0], array[j+1, 0], ... array[n, 0]
^ ^ ^
这是一种使用直接索引访问来说明正在发生的事情的方法。
var rows = [ [ 89, 18, 9 ], [ 1903, 3, 4 ], [ 3, 1, 800 ] ];
var result = [];
for (var i = 0; i < rows[0].length; i++) {
result[i] = new Array(rows[0].length).fill();
for (var j = 0; j < rows.length; j++) {
result[i][j] = rows[j][i]; // Here is the fixed column access using the outter index i.
}
}
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:0)
我会假设您根本不习惯这里使用的特定语言功能,因此您无法关注正在发生的事情,所以这里有:
您的结构是嵌套的Array
。因此嵌套的Array.map
s。
两个map
回调都使用了implicit return。
展现了这个:
rows[0].map((row, index) => {
return rows.map((column) => {
return column[index]
})
})
传递给map
回调的2个参数如下:
element
:当前迭代的Array元素;在您的第一个map
中,这是row
参数。i
:当前迭代次数,从0开始;在您的第一个map
中,这是index
参数。这就是它的全部。从那时起,您只需遵循每次迭代时迭代和每个参数的值。
答案 2 :(得分:0)
处理迭代器2d的迭代器方法(例如map
,forEach
,filter
...),因为每个元素都是1d数组
例如:
arr= [[1,0,0],
[0,1,0],
[0,0,1]]
arr.map( (item)=> {
item.forEach( (element)=> {
//...
//...
})
})
在此示例中,第一个迭代器(map
)在arr数组中占据第一行[1,0,0]
第二个迭代器采用[0,1,0]
的第二行arr,将其保存在项目中,依此类推...
在一个嵌套循环(foreach
)中,它采用实数,例如0
或1
。这里的代码可以处理它。