Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用.reduce()将数组转换为对象数组_Javascript_Arrays_Object_Functional Programming - Fatal编程技术网

Javascript 如何使用.reduce()将数组转换为对象数组

Javascript 如何使用.reduce()将数组转换为对象数组,javascript,arrays,object,functional-programming,Javascript,Arrays,Object,Functional Programming,如何使用.reduce()将多维数组转换为对象数组 起始阵列 [ [ ['juice', 'apple'], ['maker', 'motts'], ['price', 12] ], [ ['juice', 'orange'], ['maker', 'sunkist'], ['price', 11] ] ] 和结束数组 [ {juice: 'apple', maker: 'motts', price: 12}, {

如何使用.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
}

您可以尝试组合使用
array.map
array.reduce

Array.push
适用于将元素添加到数组中,但如果要将数组的所有元素转换为特定规范,则最好使用
Array.map

var数据=[
[
[“果汁”、“苹果”]、[“制造商”、“莫茨”]、[“价格”,12]
],
[
['juice','orange',['maker','sunkist',['price',11]
]
]
var result=data.map(函数(列表){
返回列表。减少(功能(o,kv){
o[kv[0]]=kv[1];
返回o;
}, {});
})

console.log(result)
您可以尝试组合使用
array.map
array.reduce

Array.push
适用于将元素添加到数组中,但如果要将数组的所有元素转换为特定规范,则最好使用
Array.map

var数据=[
[
[“果汁”、“苹果”]、[“制造商”、“莫茨”]、[“价格”,12]
],
[
['juice','orange',['maker','sunkist',['price',11]
]
]
var result=data.map(函数(列表){
返回列表。减少(功能(o,kv){
o[kv[0]]=kv[1];
返回o;
}, {});
})

console.log(result)
您实际上已经很接近了,只是您似乎认为array.push的工作原理与array.reduce类似-它不是

var transformData = array => 
    array.map(subarray => 
        subarray.reduce((result, [key, value]) => {
            result[key] = value;
            return result;
        }, {})
    );
由于您使用了一些ES2015+功能,我使用了更多。。。内部数组[键,值]的解构

我只需要把这个“扩展”添加到目前为止最好的答案中

const transformData=_=>_.map(_=>Object.assign(..._.map(([$,_])=>({[$]:_}))));

试着在几个月后阅读它,并了解它在做什么:p

你实际上很接近,只是你似乎认为array.push的工作原理与array.reduce类似——事实并非如此

var transformData = array => 
    array.map(subarray => 
        subarray.reduce((result, [key, value]) => {
            result[key] = value;
            return result;
        }, {})
    );
由于您使用了一些ES2015+功能,我使用了更多。。。内部数组[键,值]的解构

我只需要把这个“扩展”添加到目前为止最好的答案中

const transformData=_=>_.map(_=>Object.assign(..._.map(([$,_])=>({[$]:_}))));
试着在几个月后阅读它,并了解它在做什么:p

您可以将与结合使用,用于具有的属性

var数据=[['juice'、'apple']、['maker'、'motts']、['price',12]]、[['juice'、'orange']、['maker'、'sunkist']、['price',11]],
结果=data.map(o=>Object.assign(…o.map(p=>({[p[0]]:p[1]}));
控制台日志(结果)
.as控制台包装{max height:100%!important;top:0;}
可以与结合使用,用于具有

var数据=[['juice'、'apple']、['maker'、'motts']、['price',12]]、[['juice'、'orange']、['maker'、'sunkist']、['price',11]],
结果=data.map(o=>Object.assign(…o.map(p=>({[p[0]]:p[1]}));
控制台日志(结果)

.as控制台包装{max height:100%!important;top:0;}
这里是一个使用
reduce
foreach
的解决方案

var项目=[
[
[“果汁”、“苹果”]、[“制造商”、“莫茨”]、[“价格”,12]
],
[
['juice','orange',['maker','sunkist',['price',11]
]
];
var transformData=项目。减少((新的、当前的)=>{
var obj={};
当前汇率((x)=>{
obj[x[0]]=x[1];
});
返回新到达浓度(obj);
},[]);

console.log(transformData)
这里有一个使用
reduce
foreach
的解决方案

var项目=[
[
[“果汁”、“苹果”]、[“制造商”、“莫茨”]、[“价格”,12]
],
[
['juice','orange',['maker','sunkist',['price',11]
]
];
var transformData=项目。减少((新的、当前的)=>{
var obj={};
当前汇率((x)=>{
obj[x[0]]=x[1];
});
返回新到达浓度(obj);
},[]);
console.log(transformData)请尝试以下操作:

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)
试试这个:

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)

下面是一个使用
map
reduce
以及对象扩展语法的简洁表达式

const数据=[
[
[“果汁”、“苹果”]、[“制造商”、“莫茨”]、[“价格”,12]
],
[
['juice','orange',['maker','sunkist',['price',11]
]
]
常数数据2=
data.map(对=>
pairs.reduce((o[k,v])=>
({…o[k]:v}),{})

console.log(data2)
这里有一个使用
map
reduce
以及对象扩展语法的简洁表达式

const数据=[
[
[“果汁”、“苹果”]、[“制造商”、“莫茨”]、[“价格”,12]
],
[
['juice','orange',['maker','sunkist',['price',11]
]
]
常数数据2=
data.map(对=>
pairs.reduce((o[k,v])=>
({…o[k]:v}),{})

console.log(data2)
您意识到您正在将函数推到新的arraytry
array.map
而不是`array.push(`奇怪的是您认为array.push的工作原理与array.reduce:p您意识到您正在将函数推到新的arraytry
array.map
而不是`array.push(`奇怪的是,你认为array.push的工作原理类似于array.reduce:pdos
Object.assign(…o.map(
array.reduce有任何优势吗?
?我知道有一个更好的方法:顺便说一句…一直使用ES2015++-
.map(o=>Object.assign(…o.map([k,v])=>([k]:v]))))
(不过,它确实开始看起来像“brainf*ck”:p)确实
Object.assign(…o.map(
array.reduce有任何优势吗?
?我知道有一个更好的方法:p顺便说一句…一直使用ES2015++-
.map(o=>Object.assign(…o.map([k,v])=>({[k]:v}))
(不过,它确实开始看起来像“brainf*ck”:p)您还可以将其更改为reduce而不是forEach
const obj=currArr.reduce((a,x)=>{a[x[0]]=x[1];返回a},{};
Thank@GerardBanasig使用两个reduce更新了解决方案。:)您还可以将其更改为reduce而不是forEach
const obj=currArr.reduce((a,x)=>{a[x[0]]=