Bak*_*yor 33 javascript arrays jquery multidimensional-array
想象一下,我有一个阵列
A = Array(1, 2, 3, 4, 5, 6, 7, 8, 9);
Run Code Online (Sandbox Code Playgroud)
我希望它转换成二维数组(N x M矩阵),例如:
A = Array(Array(1, 2, 3), Array(4, 5, 6), Array(7, 8, 9));
Run Code Online (Sandbox Code Playgroud)
注意,矩阵的行和列是可变的.
jwu*_*ler 48
像这样的东西?
function listToMatrix(list, elementsPerSubArray) {
var matrix = [], i, k;
for (i = 0, k = -1; i < list.length; i++) {
if (i % elementsPerSubArray === 0) {
k++;
matrix[k] = [];
}
matrix[k].push(list[i]);
}
return matrix;
}
Run Code Online (Sandbox Code Playgroud)
用法:
var matrix = listToMatrix([1, 2, 3, 4, 4, 5, 6, 7, 8, 9], 3);
// result: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Run Code Online (Sandbox Code Playgroud)
sam*_*ime 29
您可以使用该Array.prototype.reduce功能在一行中执行此操作.
ECMAScript 6风格:
myArr.reduce((rows, key, index) => (index % 3 == 0 ? rows.push([key])
: rows[rows.length-1].push(key)) && rows, []);
Run Code Online (Sandbox Code Playgroud)
"普通"JavaScript:
myArr.reduce(function (rows, key, index) {
return (index % 3 == 0 ? rows.push([key])
: rows[rows.length-1].push(key)) && rows;
}, []);
Run Code Online (Sandbox Code Playgroud)
您可以将3更改为您想要的列数,或者更好,将其置于可重用的函数中:
ECMAScript 6风格:
const toMatrix = (arr, width) =>
arr.reduce((rows, key, index) => (index % width == 0 ? rows.push([key])
: rows[rows.length-1].push(key)) && rows, []);
Run Code Online (Sandbox Code Playgroud)
"普通"JavaScript:
function toMatrix(arr, width) {
return arr.reduce(function (rows, key, index) {
return (index % width == 0 ? rows.push([key])
: rows[rows.length-1].push(key)) && rows;
}, []);
}
Run Code Online (Sandbox Code Playgroud)
小智 7
此代码是通用代码,无需担心大小和数组,可以通用
function TwoDimensional(arr, size)
{
var res = [];
for(var i=0;i < arr.length;i = i+size)
res.push(arr.slice(i,i+size));
return res;
}
Run Code Online (Sandbox Code Playgroud)
当我自己偶然发现这个问题时,我能想到的最干净的方法如下:
const arrayToMatrix = (array, columns) => Array(Math.ceil(array.length / columns)).fill('').reduce((acc, cur, index) => {
return [...acc, [...array].splice(index * columns, columns)]
}, [])
Run Code Online (Sandbox Code Playgroud)
用法会是这样的
const things = [
'item 1', 'item 2',
'item 1', 'item 2',
'item 1', 'item 2'
]
const result = arrayToMatrix(things, 2)
Run Code Online (Sandbox Code Playgroud)
结果最终是
[
['item 1', 'item 2'],
['item 1', 'item 2'],
['item 1', 'item 2']
]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36522 次 |
| 最近记录: |