我要转换以下数组:
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
}
];
我该如何使用循环或其他方式做到这一点?
答案 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);