我试图将一个数组(多次)推入另一个数组。而不是数组数组,我将多次推入尝试中的所有值作为单个数组获取。我尝试过隐式地推送数组(即push([val1,val2]
),显式创建一个新的数组,然后推送新的数组。这是代码的关键部分:
var coordinates=[];
...
for(i=0;i<6;i++)
{
...
for(var j=start;j<circum[i].length;j++)
{
var segmentCoords=[];
...
if(segmentFlag===false)
{
segmentCoords.push([i+1,segmentLength]);
segmentFlag=true;
}
...
if(segmentFlag===true)
{
var tempArray=new Array(i+1,segmentLength);
segmentCoords.push(tempArray);
segmentLength+=sectorLength;
coordinates.push(segmentCoords);
segmentFlag===false;
}
...
}
从我看过的许多stackoverflow问题/答案中,我希望我的坐标数组看起来像这样:
[[val1, val2],[val3,val4],[val5,val6]]
。相反,它是[val1,val2,val3,val4,val5,val6]
。这就是我使用.concat()
或.apply()
的期望。谁能解释我的代码为什么不生成数组数组?
如果您想了解更多信息,请在这里https://jsfiddle.net/Seytom/7xm9s4qr/中找到完整的代码。
最佳答案
您似乎被console.log
愚弄了。注意这两个语句之间的区别:
console.log( 'string ' + [[1,2],[3,4]] ); // string, '1,2,3,4'
console.log( 'string ', [[1,2],[3,4]] ); // string, [[1,2],[3,4]]
由于将数组强制转换为字符串,因此是结果。它与:
console.log( new Array([1,2],[3,4]).join(',') ); // 1,2,3,4
连接数组时,无论数组是否嵌套,都只是做什么。最好单独记录该数组,以便您可以在控制台中对其进行浏览,以便简单地打印字符串,然后将该数组添加为第二个参数。 (控制台接受无限数量的参数,并将所有参数作为一个语句打印-Safari甚至将第一个作为特殊类型的参数打印为字符串(这样更易于阅读)。
简而言之:
push
的行为完全符合预期,并且您的代码应该可以按预期工作,但是打印到控制台似乎还有点不足。关于javascript - Javascript将Array推到Array但将其串联,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40609511/