我有两个这样的数组
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中最有效的方法是什么?
非常感谢任何帮助
感谢您的时间
答案 0 :(得分:1)
您可以使用某些数组方法,例如Array#map
和
Array#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;
答案 1 :(得分:1)
您可以使用两个map
函数和一些ES6功能:
var newArr = arr2.map(el => el.map((e, i) => ({ [arr1[i]]: e })));
工作示例:
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;
答案 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);
});