我试图将一个数组(多次)推入另一个数组。而不是数组数组,我将多次推入尝试中的所有值作为单个数组获取。我尝试过隐式地推送数组(即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/

10-11 04:58