2

我有这个数组,

var arr1 = [19, 1, 1, 1, 1];

和另一个数组,

var arr2 = ["Default", "Dynamic", "Assessment", "Risk", "Privacy"];

我想要的是以某种方式合并它们,使其看起来像这样,

var merged_array = [ ["Default", 19], ["Dynamic", 1], ["Assessment", 1], ["Risk", 3], ["Privacy", 2] ];

我该怎么做?我尝试过join,但没有达到我想要的。提前致谢!

4

5 回答 5

1

如果您有 jquery 或等效项:

var merged_array = $.map(arr1, function(e, i) {
    return [arr2[i], e];
});

如果没有,那么只需使用for循环,同样的想法。

var merged_array = []
for (var i = 0; i < arr1.length && i < arr2.length; i++) {
    merged_array[i] = [arr2[i], arr1[i]];
}
于 2013-01-17T22:11:03.947 回答
1
var result = new Array();
for (var i=0; i<arr1 .length && i<arr2.length ; i++) {
    result[i] = new Array();
    result[i][0] = arr1[i];
    result[i][1] = arr2[i];
}
于 2013-01-17T22:11:58.447 回答
1

使用 for 循环:

var merged_array = new Array(arr1.length);
for (var i = 0; i < arr1.length; i++) {
  merged_array[i] = new Array(arr2[i], arr1[i]);
}

这假设 arr1 和 arr2 具有相同的长度。

于 2013-01-17T22:12:35.887 回答
1

我可能会扩展array对象,特别是如果这是一项常见任务。像这样的东西:

Array.prototype.myMerge = function(arr){
    var returnArr = [];
    for(var i = 0, len = this.length; i < len; i++){
        returnArr[i] = [this[i], arr[i]];
    }
    return returnArr;
};

那么你可以这样称呼它:

var merged_array = arr1.myMerge(arr2)

当然,您必须对数组的长度添加一些错误检查,此函数假定 arr1 更长或与 arr2 长度相同。但这取决于如果 arr1 和 arr2 的长度不同,您要做什么,您的问题似乎假设它们的长度相同。

于 2013-01-17T22:15:07.927 回答
1

如果你包含库 underscore.js(prototype.js 也有类似的东西),你可以使用 _.zip(array1,array2)。它们提供了 3 个数组的示例用法。

来自http://underscorejs.org/#zip

zip_.zip(*arrays) 将每个数组的值与相应位置的值合并在一起。当您有通过匹配数组索引进行协调的单独数据源时很有用。如果您正在使用嵌套数组的矩阵,则 zip.apply 可以以类似的方式转置矩阵。

_.zip(['moe', 'larry', 'curly'], [30, 40, 50], [true, false, false]);
=> [["moe", 30, true], ["larry", 40, false], ["curly", 50, false]]
于 2013-01-17T22:24:30.427 回答