我是编程新手,我有一个任务要求从一维数组创建二维数组。我想到了这一点(没有任何外部来源的帮助,因为这会剥夺学习经验)。它适用于我们教授的测试输入,我只是想知道这是一个丑陋/低效的解决方案。
function twoDArray(arr, lenSubArray) {
var newArr = [];
var placeHolder = 0;
var leftOver = 0;
for (var i = 1; i < arr.length + 1; i++) {
/* if i is a multiple of the specified sub-array size
then add the elements from placeHolder to i
*/
if (i % lenSubArray === 0) {
newArr.push(arr.slice(placeHolder, i));
placeHolder += lenSubArray;
leftOver++; // tells us how many sub-arrays were created
}
}
/* if original array is not divisible by the length of the specified sub-array
then there will be left over values. Retrieve these values and create an
array out of them and add them to the 2d array.
*/
if (!(arr.length % lenSubArray === 0)) {
/* sub-array count multiplied by the length of each
sub-array gives us the right index to retrieve remaining values
*/
leftOver = (leftOver * lenSubArray);
newArr.push(arr.slice(leftOver))
}
return newArr;
}
测试输入:twoDArray([1,2,3,4,5],3)输出将是:[[1,2,3],[4,5]]
您不需要迭代数组。您可以改用Array.prototype.slice
函数。
function twoDArray(a, b){
return (Array(Math.ceil(a.length / b)) + '').split(',').map(function(c, d){
return a.slice(b * d, b * (d + 1));
});
}
这是你怎么称呼它的
var a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
console.log(twoDArray(a, 3));
// Output:
// [
// [1, 2, 3],
// [4, 5, 6],
// [7, 8, 9],
// [10, 11, 12]
// ]
您可以使用Array#reduce
并基于索引构建新的数组。
function twoDArray(array, length) {
return array.reduce(function (r, a, i) {
i % length ? r[r.length - 1].push(a) : r.push([a]);
return r;
}, []);
}
console.log(twoDArray([1, 2, 3, 4, 5], 3));
你太复杂了:
切片足够聪明,可以正确处理数组的末端
function twoDArray(arr, lenSubArray) {
var i = 0, result = [];
while(i < arr.length)
result.push( arr.slice(i, i+=lenSubArray) );
return result;
}
我试图将一个2d数组中的特定元素添加到另一个数组中,添加的过程是在数组的第一行选择最小的元素,并将该元素添加到同一位置的另一个2d数组中,例如: 2 22 3 5 1 54 7 3 10 20 22 21 这里,第一行中的最小元素是2,所以应该在相同的位置将2添加到另一个2d数组中,对于第二行,1是最小元素,所以我们也将1添加到另一个2d数组中,第三行中的最小元素是3,最后一行,第四行,最小的元素
为什么上面的代码不起作用,我应该如何纠正?
试图实施更大规模的井字游戏 这个游戏可以有超过3行和3列 每当发现4个连续的模式(水平,垂直或交叉) 选手是赢家 我已经找到了水平和垂直匹配的实现方法 但是找不到一种方法来识别2d数组中某个字符的交叉模式 考虑下面的二维数组 ` ` 如何检查“*”字符在这个2d数组中是否有四个连续的交叉模式
我试着做一个Loto游戏,我必须生成一张随机的卡,在第一个collum数字从1-9,第二个10-19一直到90。这张牌的另一个规则是,每行的随机位置上只能有5个数字,这就是我遇到的麻烦。 我从这个开始在每个collum中添加数字: 然后在数组的每一行的一个数字位置上放5个数字我试过这样做: 第三个也一样。 输出: 0 18 0 0 46 0 61 72 88 0 18 0 31 0 55 0 0
我有(1000、256、256)形状的3D阵列。我想从x维度中删除第100-200个条目(包含1000个条目)。写入[0:100101:1001]将从第二个维度(256个项目)进行剪切。 我如何索引它?
这段代码测试了一个标准的3×3tic tac toe游戏中的胜利。我的问题是,我如何改变里面的数字来匹配任何大小的棋盘,比如n×n? 目前,它检查第一行、第二行和第三行,以检查任何一个玩家是否在任何一行中获胜,接下来是列和对角线。但是,当板的大小更改为其他大小时,这将不再成立,因为它不会检查每一个可能的行/列/对角线。那么,对于尺寸为n×n的板,我该如何做到这一点。请不要代码,因为我不希望剽窃,但