2017-10-11 45 views
1

我試圖以特定方式合併兩個數組,但找不到正確的語法來完成此操作。從兩個單獨的數組合並兩個數組,但使用一個公共變量

primaryData = [1,2] 
secondaryData = [3,4] 
label = [label1, label2] 

目前這個工程

  data = $.map(labels, function(v, i) { 

      return [[" " + v, " " + primaryData[i], " " + secondaryData[i]]] ; 

     }); 

,給我的輸出:

[["label1", "1"], ["label2", "2"]] 

所以兩個數組的數組。

不過,我想這樣的:

[["label1", "1"], ["label2", "2"], ["label1", "3"], ["label2", "4"]] 

所以基本上做同樣的事情兩次「標籤」,然後從兩個不同來源的數字相加。

我已經試過這樣:

  data = $.map(labels, function(v, i) { 

      return [[" " + v, " " + primaryData[i]], [" " + v, " " + secondaryData[i]]]; 

     }); 

但是,這爲我提供了:

[["label1", "1"], ["label1", "3"], ["label2", "2"], ["label2", "4"]] 

所以看起來像陣列的拼接方式合併。使用+而不是逗號分隔不會在數組中創建2個數組,而是在數組中創建2個對象。

+0

發佈您的輸入數組 – RomanPerekhrest

回答

1

你可以Concat的primaryDatasecondaryData然後映射的label值,其餘操作和迭代陣列的價值。

var primaryData = [1, 2], 
 
    secondaryData = [3, 4], 
 
    label = ['label1', 'label2'], 
 
    result = primaryData.concat(secondaryData).map(function(a, i) { 
 
     return [label[i % 2], a.toString()]; 
 
    }); 
 
    
 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

謝謝你,這是按照預期工作:) – NicklasN

1

你可以使用一個簡單的for循環」

var data = []; 
 

 
for(var i = 0; i < 4; i++) { 
 
    data.push(["label" + (i % 2 + 1), (i + 1).toString()]); 
 
} 
 

 
console.log(data);

+0

這很難做到與其他陣列。或者我只是不知道你會怎麼做:data2.push([labels +(i%2 + primaryData),(secondaryData).toString()]); – NicklasN

+0

這將使您在沒有陣列的情況下獲得所需的結果。如果您需要陣列,請使用@NinaScholz的答案。 –

+0

我的問題是基於數組,但是謝謝你,Ninas按照預期工作:) – NicklasN