Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.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数组_Javascript_Arrays_Json_Object - Fatal编程技术网

使用嵌套键减少对象的Javascript数组

使用嵌套键减少对象的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

我有一个包含javascript对象列表的数组。我试图使用reduce函数将其转换为具有嵌套键分组的单个对象

该数组如下所示:

这就是我试图达到的结果:

我尝试了以下方法,但每种产品只有一个日期:


请您帮助我了解我做错了什么?

通过每个日期只有一个产品,您可以直接指定目标

在您的方法中,您使用
日期更改了
产品
,但这不起作用

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;
}, {});