将数组格式化为对象javascript

时间:2018-08-11 10:36:16

标签: javascript

我有两个数组(xy),它们的编号顺序相同,两个数组的长度相同。现在,我需要将两个数组的元素组合到一个对象中。要创建对象,我需要一个函数f,如何快速将其转换为单个对象数组

x = [1,2,3,4] 
y = [5,6,7,8]
f = function(x,y) { return { foo: x, bar: y } }
... some magic ...
result = [{ foo: 1, bar: 5},
          { foo: 2, bar: 6},
          { foo: 3, bar: 7},
          { foo: 4, bar: 8}]

当然可以使用

const array = []
for (let i = 0; i <= x.length; i++) {
    array.push(f(x[i],y[i]))
}

但是我想知道是否还有一种更“清洁”的方式?例如使用.map?还是这是要走的路?

-编辑-谢谢大家,不知道map也可以将索引作为参数传递。

3 个答案:

答案 0 :(得分:3)

您可以使用变量名称作为键来构建对象,并迭代该对象的所有条目,并以数组的索引作为结果数组的对象的索引。

这适用于任意长度的数组。

var foo = [1, 2, 3, 4],
    bar = [5, 6, 7, 8],
    result = Object
        .entries({ foo, bar })
        .reduce((r, [k, a]) => a.map((v, i) => Object.assign(r[i] || {}, { [k]: v })), []);
    
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:2)

在任何一个数组上使用reduce方法,并使用它的索引从另一个数组获取元素。

x = [1, 2, 3, 4]
y = [5, 6, 7, 8]
f = function(x, y) {
  return x.reduce(function(acc, curr, index) {
    let m = {}; //creating an array which will have two keys
    m.foo = curr,
    m.bar = y[index];
    acc.push(m);
    return acc;

  }, []);
 }
console.log(f(x, y))

您还可以使用map方法来返回数组,因此在map回调函数内部只需创建对象并返回它即可。

x = [1, 2, 3, 4]
y = [5, 6, 7, 8]
f = function(x, y) {
  return x.map((item, index) => {
    return {
      foo: item,
      bar: y[index]
    }
  })
}
console.log(f(x, y))

答案 2 :(得分:1)

您可以使用map函数。但这只是解决此问题的语法糖

x = [1,2,3,4];
y = [5,6,7,8];
console.log(x.map((el,i) => ({foo:el,bar:y[i]})));