合并两个非串联的数组,来自两个单独的数组,但有一个共同的变量

时间:2017-10-11 13:28:34

标签: javascript arrays

我正在尝试以特定方式合并两个数组,但无法找到正确的语法来执行此操作。

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个对象。

2 个答案:

答案 0 :(得分:1)

您可以使用简单的for循环“

var data = [];

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

console.log(data);

答案 1 :(得分:1)

您可以连结primaryDatasecondaryData,然后使用余数运算符和迭代数组的值映射label的值。

&#13;
&#13;
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);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;