如何使用.reduce()将多维数组转换为对象数组?
启动数组
[
[
['juice', 'apple'], ['maker', 'motts'], ['price', 12]
],
[
['juice', 'orange'], ['maker', 'sunkist'], ['price', 11]
]
]
结束数组
[
{juice: 'apple', maker: 'motts', price: 12},
{juice: 'orange', maker: 'sunkist', price: 11}
]
这就是我现在所拥有的。这真的只是我在黑暗中拍摄。
var transformData = (array) => {
var newArray = array.push(function (all, item, index) {
var newItem = item.reduce(function (all, item, index) {
all[item[0]] = item[1]
return all
}, {})
return all
}, [])
newArray.push(newItem)
return newArray
}
答案 0 :(得分:1)
您可以尝试array.reduce
和Array.push
的组合。
array.map
适合于向数组添加元素,但如果要将数组的所有元素转换为特定规范,最好使用var data = [
[
['juice', 'apple'], ['maker', 'motts'], ['price', 12]
],
[
['juice', 'orange'], ['maker', 'sunkist'], ['price', 11]
]
]
var result = data.map(function(list){
return list.reduce(function(o, kv){
o[kv[0]] = kv[1];
return o;
}, {});
})
console.log(result)
13
答案 1 :(得分:1)
您可以将Array#map
与Object.assign
结合使用spread syntax ...
的属性。
var data = [[['juice', 'apple'], ['maker', 'motts'], ['price', 12]], [['juice', 'orange'], ['maker', 'sunkist'], ['price', 11]]],
result = data.map(o => Object.assign(...o.map(p => ({ [p[0]]: p[1] }))));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 2 :(得分:1)
以下是使用reduce
和foreach
的解决方案。
var items = [
[
['juice', 'apple'], ['maker', 'motts'], ['price', 12]
],
[
['juice', 'orange'], ['maker', 'sunkist'], ['price', 11]
]
];
var transformData = items.reduce((newArr, currArr) => {
var obj = {};
currArr.forEach((x) => {
obj[x[0]] = x[1];
});
return newArr.concat(obj);
},[]);
console.log(transformData);
使用两个减少的解决方案。
var items = [
[
['juice', 'apple'], ['maker', 'motts'], ['price', 12]
],
[
['juice', 'orange'], ['maker', 'sunkist'], ['price', 11]
]
];
var transformData = items.reduce((newArr, currArr) => {
return newArr.concat(currArr.reduce((o, arr) =>{
o[arr[0]] = arr[1];
return o;
}, {}));
},[]);
console.log(transformData);
答案 3 :(得分:0)
你真的很接近,除了你似乎认为array.push像array.reduce一样工作 - 它不是
private
由于你正在使用一些ES2015 +功能,我使用了更多...内部数组的解构[key,value]
我必须将此“扩展名”添加到目前为止的最佳答案
var transformData = array =>
array.map(subarray =>
subarray.reduce((result, [key, value]) => {
result[key] = value;
return result;
}, {})
);
在几个月内尝试阅读并知道它在做什么:p
答案 4 :(得分:0)
试试这个:
var parray=[
[
['juice', 'apple'], ['maker', 'motts'], ['price', 12]
],
[
['juice', 'orange'], ['maker', 'sunkist'], ['price', 11]
]
];
var newArray=[]
parray.forEach(function(data){
var cak = data.reduce(function(a, b) {
a[b[0]]=b[1]
return a;
}, {})
newArray.push(cak)
})
console.log(newArray)
答案 5 :(得分:0)
这是使用map
和reduce
以及对象扩展语法的简洁表达。
const data = [
[
['juice', 'apple'], ['maker', 'motts'], ['price', 12]
],
[
['juice', 'orange'], ['maker', 'sunkist'], ['price', 11]
]
]
const data2 =
data.map (pairs =>
pairs.reduce ((o, [k,v]) =>
({ ...o, [k]: v }), {}))
console.log (data2)