【问题标题】:How to combine 2 arrays into 1 object javascript如何将 2 个数组组合成 1 个对象 javascript
【发布时间】:2019-06-06 19:51:05
【问题描述】:

我有 2 个数组要“减少”为 1 个对象。

例如:

我有..

var originalData = [1,2,3];

var newData = [3,1,2];

我想将这两个数组组合成一个如下所示的对象:

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

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

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

任何建议都会被欣赏

【问题讨论】:

标签: javascript arrays reduce


【解决方案1】:

减少第一个数组(键),并使用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);

【讨论】:

    【解决方案2】:

    你只是用错了.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)

    【讨论】:

      【解决方案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);

      【讨论】:

      • @Shidersz,以空对象为目标对象,它适用于空数组。
      猜你喜欢
      • 2021-11-11
      • 1970-01-01
      • 2014-08-30
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      • 2018-11-17
      • 2016-11-12
      相关资源
      最近更新 更多