有没有办法在不使用嵌套循环的情况下将N个N长度的数组推入数组?

时间:2014-05-22 20:44:54

标签: javascript arrays

我不想做下面的事情,或者这是我唯一的选择?

var tempArray = [];
var tempArray2 = [];

for(var j = 0; j < data.length; j++) {
    tempArray2 = [];
    for(var k = 0; k < data[0].length; k++) {
        tempArray2.push(data[j][k]);
    }
    tempArray.push( tempArray2 );
}

1 个答案:

答案 0 :(得分:1)

您可以使用apply方法并立即推送整个数组。从来没有尝试使用像数组这样的矩阵。

示例:

var tempArray = [], tempArray2 = [];

for(var j = 0, dataLen = data.length; j < dataLen; j++) {
    tempArray2.push.apply(tempArray2, data[j]);
    tempArray.push(tempArray2), tempArray2 = [];
}

的jsfiddle:

http://jsfiddle.net/k264S/6/

或者如 cookie monster 指出的那样使用slice()而没有参数会创建一个浅拷贝(它也不会复制引用的值)。

示例:

var tempArray = [];

for(var j = 0, dataLen = data.length; j < dataLen; j++) {
    tempArray.push(data[j].slice());
}

只要您的data[j]中的元素少于~150.000,就会有效。

如果它有更多,你应该使用这个答案中提到的技术:How to extend an existing JavaScript array with another array, without creating a new array?