JS:如何将数组转换为对象

时间:2019-06-13 03:00:25

标签: javascript

我要转换以下数组:

const data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]];

到以下对象:

const data = [
  {
    a: 1,
    b: 2,
    c: 3,
    d: 4
  },
  {
    a: 5,
    b: 6,
    c: 7,
    d: 8
  },
  {
    a: 9,
    b: 10,
    c: 11,
    d: 12
  }
];

我该如何使用循环或其他方式做到这一点?

2 个答案:

答案 0 :(得分:7)

这是一种基本的map / reduce操作,您可以将外部数组map reduced到一个新对象,将每个外部数组array destructuring指向一个对象。

鉴于每个值(具有四个值的单个数组)的简单性质,您可以将Array.prototype.reduce()跳过一些{{3}}。

例如

const data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]];

const newData = data.map(([ a, b, c, d ]) => ({ a, b, c, d }))

console.info(newData)

请注意,这实际上取决于了解数据结构,而不会感到惊讶(例如,每个数组中的元素更多或更少)。


如果您想要一个更强大的版本,您将需要类似的东西

const data = [[1, 2, 3, 4], [5, 6, 7], [8, 9, 10, 11, 12]];

const newData = data.map(arr => arr.reduce((obj, val, idx) => ({
  ...obj,
  [String.fromCharCode(97 + idx)]: val
}), Object.create(null)))

console.info(newData)

这里唯一要担心的是如果您的数组包含超过26个元素。然后您的对象键会变得很奇怪。

答案 1 :(得分:1)

您可以将Array.prototype.map()Array.prototype.reduce()组合使用

代码:

const alphabet = [...'abcdefghijklmnopqrstuvwxyz'];
const data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]];
const reasult = data.map(arr => arr.reduce((a, c, i) => (a[alphabet[i]] = c, a), {}));

console.log(reasult);