如何将2个数组组合成1个对象javascript

时间:2019-01-11 21:19:00

标签: javascript arrays reduce

我有2个要“简化”为1个对象的数组。

例如:

我有..

var originalData = [1,2,3];

var newData = [3,1,2];

我想将这两个数组组合成一个看起来像这样的对象:

var newOrderObject = {1:3, 2:1, 3:2};

im使用reduce函数,但似乎将它们映射的方式不同

var newOrderObject = originalData.reduce(function(newData) {
  var orderObject = {};
  originalData = newData;
  return orderObject;
}, {});

任何建议都会被赞赏

3 个答案:

答案 0 :(得分:6)

减少第一个数组(键),并使用index从第二个数组中获取值:

var originalData = [1,2,3];
var newData = [3,1,2];

var newOrderObject = originalData.reduce(function(obj, key, index) {
  obj[key] = newData[index];
  return obj;
}, {});

console.log(newOrderObject);

答案 1 :(得分:3)

您可以映射单个对象并将其分配给单个对象。如果可以使用空数组,请使用一个空对象作为目标值。

var keys = [1, 2, 3],
    values = [3, 1, 2],
    object = Object.assign({}, ...keys.map((k, i) => ({ [k]: values[i] })));

console.log(object);

更干净的方法是将数组转置为键/值对数组,然后映射对象。

const transpose = (r, a) => a.map((v, i) => (r[i] || []).concat(v));

var keys = [1, 2, 3],
    values = [3, 1, 2],
    object = Object.assign(
        {},
        ...[keys, values]
            .reduce(transpose, [])
            .map(([k, v]) => ({ [k]: v }))
    );

console.log(object);

答案 2 :(得分:3)

您只是错误地使用.reduce

  • 其回调的第一个参数是您的 accumulator 对象 通过。
  • 第二个是当前迭代的项目。
  • 第三个是索引。

使用全部3个,您将获得想要的结果。

var originalData = [1,2,3];
var newData = [3,1,2];

var newOrderObject = originalData.reduce(function(acc, item, i) {
  return Object.assign(acc, { [item]: newData[i] })
}, {});

console.log(newOrderObject)