在javascript中操作数组

时间:2016-04-21 12:26:42

标签: javascript arrays

我有两个这样的数组

var arr1 = ["1", "2", "3", "4"];
var arr2 = [["a", "b", "c", "d"], ["e", "f", "g", "h"], ["i", "j", "k", "l"], ["m", "n", "o", "p"], ["q", "r", "s", "t"]];

我想要做的是合并两个数组以形成一个看起来像这样的最终输出

var newArr = [{1: "a", 2: "b", 3: "c", 4: "d"}, {1: "e", 2: "f", 3: "g", 4: "h"}, {1: "i", 2: "j", 3: "k", 4: "l"}, {1: "m", 2: "n", 3: "o", 4: "p"}, {1: "q", 2: "r", 3: "s", 4: "t"}];

从而有效地将每个数组从第二个数组中取出,然后将其与第一个数组合并以形成一个对象。

我只是徘徊在javascript中最有效的方法是什么?

非常感谢任何帮助

感谢您的时间

4 个答案:

答案 0 :(得分:1)

您可以使用某些数组方法,例如Array#mapArray#forEach



var arr1 = ["1", "2", "3", "4"],
    arr2 = [["a", "b", "c", "d"], ["e", "f", "g", "h"], ["i", "j", "k", "l"], ["m", "n", "o", "p"], ["q", "r", "s", "t"]],
    newArr = arr2.map(function (a) {
        var o = {};
        arr1.forEach(function (b, i) {
            o[b] = a[i];
        });
        return o;
    });

document.write('<pre>' + JSON.stringify(newArr, 0, 4) + '</pre>');
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您可以使用两个map函数和一些ES6功能:

var newArr = arr2.map(el => el.map((e, i) => ({ [arr1[i]]: e })));

工作示例:

&#13;
&#13;
var arr1 = ["1", "2", "3", "4"];
var arr2 = [ ["a", "b", "c", "d"], ["e", "f", "g", "h"], ["i", "j", "k", "l"], ["m", "n", "o", "p"], ["q", "r", "s", "t"] ];

var newArr = arr2.map(el => el.map((e, i) => ({ [arr1[i]]: e })));

document.write('<pre>' + JSON.stringify(newArr, 0, 2) + '</pre>');
&#13;
&#13;
&#13;

答案 2 :(得分:1)

假设输入始终匹配,我将从arr2开始:

arr2.map(x => 

但是,此时您想要的是来自zip的{​​{1}}值和来自x的相应值,所以让我们首先介绍一个帮助(我实际上会调用它y 1 因为它将值从第一个参数映射到键,第二个映射到值。)

zipKeyVal

有了这个,我们的解决方案就变成了:

function zipKeyVal(keys,values) {
    var result = {};
    for (var i = 0; i < keys.length; i++) {
        result[keys[i]] = values[i];
    }
    return result;
}

1 哦,显然是下划线.js调用var newArr = arr2.map(x => zipKeyVal(arr1, x)); 和lodash _.object

答案 3 :(得分:1)

使用下划线:

var newArr = _.map(arr2, function(arr) {
    return _.object(arr1, arr);
});