将两个数组的值合并到对象中

时间:2017-02-24 21:56:07

标签: javascript

我有两个数组:

array1 = ["Bob", "John", "Dave"];
array2 = [1, 2, 3];

是否将两者合并为一个javascript数组,其中包含如下所示的对象:

[
  {meta: 'Bob', value: 1 },
  {meta: 'John', value: 2},
  {meta: 'Dave', value: 3}
]

5 个答案:

答案 0 :(得分:2)

让我们把它分解。

你有两个长度相等的数组,你想从每个数组中提取一个值。

// Could also do array2.length since they're the same size
for (var i = 0; i < array1.length; i++) {
  var val1 = array1[i];
  var val2 = array2[i]
}

并且您想使用这两个值

创建一个对象
for (var i = 0; i < array1.length; i++) {
  var val1 = array1[i];
  var val2 = array2[i]
  var obj = {
    meta: val1,
    value: val2
  };
}

最后,您希望将每个生成的对象存储在数组中

var result = [];
for (var i = 0; i < array1.length; i++) {
  var val1 = array1[i];
  var val2 = array2[i]
  var obj = {
    meta: val1,
    value: val2
  };
  result.push(obj);
}

现在你有了结果!

您可以通过多种方式重写此内容。例如:

var result = array1.map(function(val1, index) {
  return {
    meta: val1,
    value: array2[index]
  };
});

或者如果您处于支持它的环境中:

let result = array1.map((val1, index) => (
  {
    meta: val1,
    value: array2[index]
  }
));

答案 1 :(得分:1)

这是实现目标的方法之一。您可以使用Array#forEach函数迭代array1中的每个元素。然后,创建空对象并设置指定的属性 - 在您的情况下:metavalue。然后 - 为其分配元素,然后将其推入arr变量。

&#13;
&#13;
var array1 = ["Bob", "John", "Dave"],
    array2 = [1, 2, 3],
    arr = [];

array1.forEach(function(v,i){
  var obj = {};
  obj.meta = v;
  obj.value = array2[i];
  arr.push(obj);
});

console.log(arr);
&#13;
&#13;
&#13;

答案 2 :(得分:0)

假设您正在使用Chrome,则可以执行以下操作:

const combined = array1.map((name,i) => ({meta: name, value: array2[i]}))

答案 3 :(得分:0)

您可以使用对象并迭代键和值。

&#13;
&#13;
var array1 = ["Bob", "John", "Dave"],
    array2 = [1, 2, 3],
    object = { meta: array1, value: array2 },
    result = Object.keys(object).reduce(function (r, k) {
        object[k].forEach(function (a, i) {
            r[i] = r[i] || {};
            r[i][k] = a;
        });
        return r;
    }, []);

console.log(result);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;

答案 4 :(得分:0)

使用Array.prototype.map()函数的简单解决方案:

var array1 = ["Bob", "John", "Dave"], 
    array2 = [1, 2, 3],
    combined = array1.map(function(v, k, a){ return {meta: v, value: array2[k]}; });
    
console.log(combined);