如果想用javascript创建一个二维m x n
数组,根据列数,在我的函数中作为参数输入,行将从另一个参数创建,该参数将是一个数组。
我希望实现的目标-期望的结果:
var arr = [0,1,2,3,4,5,6,7,8,9]
function TwoDimensionalArray(numRows, numCols) {
//Magic happens here!
}
TwoDimensionalArray(arr, 4);
正如你所看到的,下面是一个3 x 4矩阵和一个期望的结果
[[0,1,2,3], [4,5,6,7],[8,9]]
输入大小没有区别,列数是关键因素和决定因素。
我目前拥有的-不希望的结果:
var arr = [0,1,2,3,4,5,6,7,8,9,10,11,12,13]
function TwoDimensionalArray(numRows, numColumns) {
var twoD = [];
for (var row = 0; row < numRows.length; ++row) {
var cardIndex = numRows[row]
// console.log(numRows[row]);
var columns = [];
for(var j =0; j < numColumns; ++j) {
columns[j] = cardIndex;
}
twoD[cardIndex] = columns;
}
return twoD;
};
var matrixTwoD = TwoDimensionalArray(arr, 4);
console.log(matrixTwoD);
console.log(matrixTwoD[0][0]);
console.log(matrixTwoD[0][1]);
console.log(matrixTwoD[0][2]);
console.log(matrixTwoD[0][3]);
我当前的代码创建了一个数组,它将每个元素重复4次,直到列大小为4:[[0,0,0,0], [1,1,1,1]....[13,13,13,13]]
的数字13
也许我在for循环中做错了什么,或者没有正确处理问题。但任何能给我指明正确方向的东西都能得到上述渴望的结果。
反弹
此外,是否有人会向我介绍与这类问题有关的矩阵代数的额外资源,以及任何有助于自我学习的一般资源。
谢谢大家!
保持简单,将输入的Array切片为numCols
长度的部分
function TwoDimensionalArray(arr, numCols) {
var arr2d = [],
i;
if (numCols) // safety first!
for (i = 0; i < arr.length; i += numCols)
arr2d.push(arr.slice(i, i + numCols));
return arr2d;
}
if (numCols)
在未提供numCols或为0
的情况下防止无限循环for (i = 0; i < arr.length; i += numCols)
从numCols
中的0
向上计数,例如i = 0, 4, 8, 16, ...
,直到我们达到大于arr.length
的数字arr.slice(i, i + numCols)
创建Array的子数组,从(包括)索引i
开始,到(不包括)索引i + numCols
结束,即我们得到一个长为numCols
的Array子阵列,从arr
的索引i
的项开始arr2d.push
在arr2d
的末尾添加一个新项目
将所有这些放在一起,我们可以看到,我们正在从阵列arr
arr2d
计算所需列,然后使用数组的slice方法。
开始索引=(numColumns*i)结束索引=numColumns*(i+1)
var arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
function TwoDimensionalArray(numRows, numColumns) {
var columns = [];
for (var i = 0; i !== Math.ceil(numRows.length / numColumns); i++) {
columns[i] = numRows.slice((numColumns * i), numColumns * (i + 1))
//console.log((numColumns * i) + " " +numColumns * (i + 1))
}
return columns;
};
var matrixTwoD = TwoDimensionalArray(arr, 4);
console.log(matrixTwoD);
console.log(matrixTwoD[0][0]);
console.log(matrixTwoD[0][1]);
console.log(matrixTwoD[0][2]);
console.log(matrixTwoD[0][3]);