使用嵌套键减少对象的Javascript数组
我有一个包含javascript对象列表的数组。我试图使用reduce函数将其转换为具有嵌套键分组的单个对象 该数组如下所示: 这就是我试图达到的结果: 我尝试了以下方法,但每种产品只有一个日期:使用嵌套键减少对象的Javascript数组,javascript,arrays,json,object,Javascript,Arrays,Json,Object,我有一个包含javascript对象列表的数组。我试图使用reduce函数将其转换为具有嵌套键分组的单个对象 该数组如下所示: 这就是我试图达到的结果: 我尝试了以下方法,但每种产品只有一个日期: 请您帮助我了解我做错了什么?通过每个日期只有一个产品,您可以直接指定目标 在您的方法中,您使用日期更改了产品,但这不起作用 var价格表=[{产品:1,日期:“2020-01-01”,价格:100},{产品:2,日期:“2020-01-01”,价格:102},{产品:1,日期:“2020-01-02
请您帮助我了解我做错了什么?通过每个日期只有一个产品,您可以直接指定目标 在您的方法中,您使用
日期更改了产品
,但这不起作用
var价格表=[{产品:1,日期:“2020-01-01”,价格:100},{产品:2,日期:“2020-01-01”,价格:102},{产品:1,日期:“2020-01-02”,价格:99},{产品:2,日期:“2020-01-02”,价格:92},{产品:1,日期:“2020-01-03”,价格:101},{产品:2,日期:“2020-01-03”,价格:22},
结果=价格表。减少((对象,项目)=>{
obj[item.product]=obj[item.product]|{};
obj[项目.产品][项目.日期]=项目;
返回obj;
}, {});
控制台日志(结果)代码>
.as console wrapper{max height:100%!important;top:0;}
由于每个日期只有一个产品,因此您可以选择直接目标进行分配
在您的方法中,您使用日期更改了产品
,但这不起作用
var价格表=[{产品:1,日期:“2020-01-01”,价格:100},{产品:2,日期:“2020-01-01”,价格:102},{产品:1,日期:“2020-01-02”,价格:99},{产品:2,日期:“2020-01-02”,价格:92},{产品:1,日期:“2020-01-03”,价格:101},{产品:2,日期:“2020-01-03”,价格:22},
结果=价格表。减少((对象,项目)=>{
obj[item.product]=obj[item.product]|{};
obj[项目.产品][项目.日期]=项目;
返回obj;
}, {});
控制台日志(结果)代码>
.as console wrapper{max height:100%!important;top:0;}
是否只有一个产品用于产品/日期?不能有多个产品具有相同的ID用于相同的日期。是否只有一个产品用于产品/日期?不能有多个产品具有相同的ID用于相同的日期。这很有意义。谢谢,这很有道理。非常感谢。
[
{
"product": 1,
"date": "2020-01-01",
"price": 100
},
{
"product": 2,
"date": "2020-01-01",
"price": 102
},
{
"product": 1,
"date": "2020-01-02",
"price": 99
},
{
"product": 2,
"date": "2020-01-02",
"price": 92
},
{
"product": 1,
"date": "2020-01-03",
"price": 101
},
{
"product": 2,
"date": "2020-01-03",
"price": 22
}
]
{
1:{
"2020-01-01":{
"product": 1,
"date": "2020-01-01",
"price": 100
},
"2020-01-02":{
"product": 1,
"date": "2020-01-02",
"price": 99
},
"2020-01-03":{
"product": 1,
"date": "2020-01-03",
"price": 101
}
},
2:{
"2020-01-01":{
"product": 2,
"date": "2020-01-01",
"price": 102
},
"2020-01-02":{
"product": 2,
"date": "2020-01-02",
"price": 92
},
"2020-01-03":{
"product": 2,
"date": "2020-01-03",
"price": 22
}
}
}
pricelist.reduce((obj, item) => {
obj[item['product']] = {};
obj[item['date']][item['product']] = item;
return obj;
}, {});