以最佳方式将对象数组和[[{a:1,b:2},{c:3,d:4}],{e:5}]
数组转换为javascript中的[{a:1},{b:2},{c:3},{d:4},{e:5}]
对象单个数组。
我使用spread运算符来展平数组,但是{...[{a:1,b:2}] }
给了{0:{a:1},1:{b:2}}
这是添加额外的键。然后我通过迭代所有元素来删除密钥。请帮助我找到最佳解决方案。
答案 0 :(得分:1)
最短
var data = [[{a:1,b:2},{c:3,d:4}],{e:5}];
var result = [].concat(...data).reduce((ac,a) =>
ac.concat(Object.keys(a).map( k=>({[k]:a[k]}) )) ,[]);
console.log(result);

答案 1 :(得分:1)
您可以使用copy-dependencies
展平您的阵列。然后,使用array#reduce
使用array#reduce
获取单个键值对。
array#map

答案 2 :(得分:1)
使用Array#concat和spread展平数组,通过传播到Object#assign,将entries和map组合到单个对象申请表格:
var data = [[{a:1,b:2},{c:3,d:4}],{e:5}];
var getObject = (data) => {
return data
.reduce((r, b) => r.concat(b), [])
.reduce((r,o) => r.concat(Object.keys(o).map(k => ({[k] : o[k]}))),[]);
}
console.log(getObject(data));

答案 3 :(得分:1)
您可以检查一个数组并采用递归方法来处理这种情况。如果没有映射具有单个属性的对象的条目。
var data = [[{ a: 1, b: 2 }, { c: 3, d: 4 }], { e: 5 }],
result = data.reduce(function fn(r, a) {
return r.concat(Array.isArray(a)
? a.reduce(fn, [])
: Object.entries(a).map(([k, v]) => ({ [k]: v }))
);
}, []);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 4 :(得分:0)
这样的东西?
console.log([[{a:1,b:2},{c:3,d:4}],{e:5}].
reduce((arr, element) => Array.isArray(element) ? [...arr, ...element] : [...arr, element], []).
reduce((arr, element) => [...arr, ...Object.entries(element).map(([key, value]) => ({[key]: value}))], []));