如何使用javascript处理将数组数组转换为对象数组的任务?例如。
[
[
[a,b],[c,d],[e,f]
],
[
[g,h],[i,j],[k,l]
]
]
--->
[
{a:b, c:d, e:f}, {g:h, i:j, k:l}
]
答案 0 :(得分:2)
使用map
和reduce
const data = [
[ ['a', 1], ['b', 2], ['c', 3] ],
[ ['d', 4], ['e', 5], ['f', 6] ]
]
const data2 = data.map(pairs =>
pairs.reduce((obj, [k,v]) =>
Object.assign(obj, { [k]: v }), {}))
console.log(data2)
// [ { a: 1, b: 2, c: 3 }, { d: 4, e: 5, f: 6 } ]
通用功能
上述转换在认知上是密集的,可以分解为两个有用的函数 - 这两个函数mapReducer
和pair2obj
足够通用,我们可以轻松地在程序的其他部分重用它们
const mapReducer = (f, g) =>
(acc, x) => f (acc, g (x))
const pair2obj = ([x, y]) =>
({ [x]: y })
const data = [
[ ['a', 1], ['b', 2], ['c', 3] ],
[ ['d', 4], ['e', 5], ['f', 6] ]
]
const data2 = data.map (pairs =>
pairs.reduce(mapReducer(Object.assign, pair2obj), {}))
console.log(data2)
// [ { a: 1, b: 2, c: 3 }, { d: 4, e: 5, f: 6 } ]
原生Map
如果您可以在程序中使用Map
个对象,这可能会更好,因为您的数据已经采用Map
构造函数接受的格式
const data = [
[
['a',1],['b',2],['c',3]
],
[
['d',4],['e',5],['f',6]
]
]
const data2 = data.map(pairs => new Map(pairs))
console.log(data2[0].get('a')) // 1
console.log(data2[0].get('b')) // 2
console.log(data2[0].get('c')) // 3
console.log(data2[1].get('d')) // 4
console.log(data2[1].get('e')) // 5
console.log(data2[1].get('f')) // 6
答案 1 :(得分:0)
我很好奇,所以我觉得我有一个裂缝。
我假设key
值始终是允许的对象键值。
var data = [
[
['a','b'],['c','d'],['e','f']
],
[
['g','h'],['i','j'],['k','l']
]
];
// ES5
data = data.map(function (d) {
return d.reduce(function (o, v) {
o[v[0]] = v[1];
return o;
}, {});
});
// ES6
data = data.map((d) => d.reduce((o, v) => {
o[v[0]] = v[1];
return o;
}, {}));
console.log(data);