【问题标题】:converting an array containing arrays of arrays into an array containing object将包含数组数组的数组转换为包含对象的数组
【发布时间】:2017-06-10 04:50:05
【问题描述】:

我陷入了这个问题。几个小时过去了,但无法解决它。这让我很困惑。

谁能帮我解决这个问题?

输入:

[
  [
    ['firstName', 'Joe'],
    ['lastName', 'Blow'],
    ['age', 42],
    ['role', 'clerk']
  ],
  [
    ['firstName', 'Mary'],
    ['lastName', 'Jenkins'],
    ['age', 36],
    ['role', 'manager']
  ]
]

输出:

[{
    firstName: 'Joe',
    lastName: 'Blow',
    age: 42,
    role: 'clerk'
  },
  {
    firstName: 'Mary',
    lastName: 'Jenkins',
    age: 36,
    role: 'manager'
  }
]

【问题讨论】:

  • 你能告诉我们你的尝试吗?
  • 几个小时过去了,但无法解决 这意味着你已经尝试了一些东西。你能分享一些尝试吗?这样我们就可以帮助您指出错误并提供正确的解决方案
  • input.map(array => array.reduce((obj, pairs) => { obj[pairs[0]] = pairs[1]; return obj; }, {}));
  • 到目前为止你尝试过什么?你被困在哪里了?你知道什么?你知道如何遍历数组吗?如何创建对象?如何为对象分配属性?

标签: javascript arrays javascript-objects


【解决方案1】:

使用Array#mapArray#reduce方法来实现结果。

var data = [
  [
    ['firstName', 'Joe'],
    ['lastName', 'Blow'],
    ['age', 42],
    ['role', 'clerk']
  ],
  [
    ['firstName', 'Mary'],
    ['lastName', 'Jenkins'],
    ['age', 36],
    ['role', 'manager']
  ]
];

var res = data
  // iterate over the main array
  .map(function(arr) {
    // iterate over the inner array to generate object
    return arr.reduce(function(o, a) {
      // define the object property based on the element
      o[a[0]] = a[1];
      // return object reference
      return o;
      // set initial value as an empty object
    }, {});
  });

console.log(res);

ES6 arrow function:

var data = [
  [
    ['firstName', 'Joe'],
    ['lastName', 'Blow'],
    ['age', 42],
    ['role', 'clerk']
  ],
  [
    ['firstName', 'Mary'],
    ['lastName', 'Jenkins'],
    ['age', 36],
    ['role', 'manager']
  ]
];

var res = data.map(arr => arr.reduce((o, a) => (o[a[0]] = a[1], o), {}));

console.log(res);

【讨论】:

  • 我有类似的代码,但正在等待OP分享努力。
猜你喜欢
  • 1970-01-01
  • 2012-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-18
  • 2016-12-06
相关资源
最近更新 更多