Javascript 有没有办法将N个数组';在不使用嵌套循环的情况下将N个长度的s放入数组?
我不想做下面这样的事情,或者这是我唯一的选择Javascript 有没有办法将N个数组';在不使用嵌套循环的情况下将N个长度的s放入数组?,javascript,arrays,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
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 );
}
var tempArray=[];
var tempArray2=[];
对于(var j=0;j
您可以使用应用
方法,一次推送整个阵列。从未尝试过使用类似矩阵的数组
例如:
var tempArray = [], tempArray2 = [];
for(var j = 0, dataLen = data.length; j < dataLen; j++) {
tempArray2.push.apply(tempArray2, data[j]);
tempArray.push(tempArray2), tempArray2 = [];
}
var tempArray = [];
for(var j = 0, dataLen = data.length; j < dataLen; j++) {
tempArray.push(data[j].slice());
}
只要您的数据[j]
中的元素少于~150.000个,这将起作用
如果它有更多,你应该使用这个答案中提到的技巧:我在你的代码中没有看到
N
。另外,我假设你指的是数据[j]。在你的内部for循环中的长度。
。虽然可能有更简洁的东西,但这种循环从根本上发生了。这没有多大意义。您的tempArray
将保留对tempArray2
的j
引用。它们都将引用具有相同成员的完全相同的数组..这也是事实。他没有将tempArray2
的引用重新设置为新的数组对象。您没有重新设置引用是正确的。刚刚解决了这个问题。谢谢<代码>tempArray.push.apply(tempArray[data[j]])
与tempArray.push(data[j])相同代码>。您是否打算将数据[j]
放在[]
中?它不一样。没有[]
tempArray
将是一个包含10000个元素的一维数组。使用[]
它将是一个与数据完全相同的矩阵。请再次阅读我的评论。如果您执行了tempArray.push.apply(tempArray,data[j]),那么您是对的代码>,那么它将是一个单一的平面阵列,但这不是我所说的,它与。您的.apply()
版本与执行tempArray.push(数据[j])相同哦,对不起,误读了。但这是不一样的。如果执行tempArray.push(数据[j])代码>参考将是相同的。所以没有优势。如果执行tempArray.push.apply(tempArray[data[j]])代码>参考将不同。这将是一个新的矩阵。不,两种方式都是相同的参考。数组永远不会被复制。使用.apply
所做的一切都是说“取下这些参数集合,假装我分别传递了它们”。换句话说,foo.push.apply(foo[bar,baz,buz])
与foo.push(bar,baz-buz)完全相同代码>