我有以下包含JavaScript对象列表的数组。我正在尝试使用reduce函数将其转换为带有嵌套键分组的单个对象。
该数组如下所示:
[ { "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; }, {});
请您帮我了解我在做什么错吗?
答案 0 :(得分:0)
由于每个日期只有一种产品,您可以直接指定目标。
在您的方法中,您用product
更改了date
,但这是行不通的。
var pricelist = [{ 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 }],
result = pricelist.reduce((obj, item) => {
obj[item.product] = obj[item.product] || {};
obj[item.product][item.date] = item;
return obj;
}, {});
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }