2016-11-15 28 views
0

我想推入一個數組(多次)到另一個數組。我將所有來自多次嘗試的值視爲單個數組,而不是數組。我試着隱式地推送一個數組(即push([val1,val2]),顯式創建一個新的數組,然後推送新的數組。下面的代碼的關鍵部分:Javascript將數組推到數組,但串聯,而不是連接

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;       
       } 
      ... 
} 

從許多計算器問題/答案我已經看了,我希望我的座標陣列看起來是這樣的:[[val1, val2],[val3,val4],[val5,val6]]。相反,它是[val1,val2,val3,val4,val5,val6]。如果我使用.concat().apply(),我就會這麼想。

任何人都可以解釋爲什麼我的代碼不生成數組數組?

我已經在這裏得到了完整的代碼https://jsfiddle.net/Seytom/7xm9s4qr/以防萬一你想看到更多的代碼。

+0

'變種superSetArray = []; superSetArray.push([1,2]); superSetArray.push([3,4]); superSetArray.push([5,6]); console.log(superSetArray);' - 此代碼的工作方式與您的期望完全相同。 – Developer

回答

2

你似乎被你的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的行爲與預期完全一致,並且您的代碼應該按預期方式工作,但打印到控制檯似乎留了一點需要:)。

+1

我記得我第一次做這個時,哦,facepalm ... +1 – Kingsthor

+1

謝謝,那就是它。 – Seytom

+1

@Kingsthor,是的,現在有一種永久性標記:) – Seytom

0

使用Array.concat

var arrA = [0]; 
 
var arrB = [1, 2]; 
 
while (arrA.length < 10) { 
 
    arrA = arrA.concat(arrB) 
 
} 
 
console.log(arrA)

+0

這正是OP想要避免或似乎有的行爲(請參閱下面的答案)。 – somethinghere

相關問題