Viv*_*omi 1 javascript reduce functional-programming ecmascript-6
我已经被困在这8天了.
让我们说这是我的响应对象数组:
var items = [
{
name: 'dell-66',
price: 200,
id: 12,
},
{
name: 'hp-44',
price: 100,
id: 10,
},
{
name: 'acer-33',
price: 250,
id: 33,
},
{
name: 'dell-66',
price: 200,
id: 12,
},
{
name: 'acer-33',
price: 250,
id: 33,
},
{
name: 'dell-66',
price: 200,
id: 12,
},
]
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已设法使用reduce来累积价格.这是执行此操作的代码:
var obj = items.reduce( function (allItems, currentItem) {
var item_name = currentItem.name;
var item_price = currentItem.price;
var total_prices = allItems[item_price] = (allItems[item_price] || 0) +
item_price;
var result = {};
result[item_name] = {
item_price: total_prices,
}
return Object.assign(allItems, result);
}, {} )
Run Code Online (Sandbox Code Playgroud)
虽然这有效,但它不会返回我想要的结果,而是返回:
{
'100': 100,
'200': 600,
'250': 500,
'dell-66': { item_price: 600 },
'hp-44': { item_price: 100 },
'acer-33': { item_price: 500 }
}
Run Code Online (Sandbox Code Playgroud)
这是我的意图和需要它(没有额外的键/值在顶部):
{
'dell-66': { item_price: 600 },
'hp-44': { item_price: 100 },
'acer-33': { item_price: 500 }
}
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做呢?
你可以这样做.
const items = [{
name: 'dell-66',
price: 200,
id: 12,
}, {
name: 'hp-44',
price: 100,
id: 10,
}, {
name: 'acer-33',
price: 250,
id: 33,
}, {
name: 'dell-66',
price: 200,
id: 12,
}, {
name: 'acer-33',
price: 250,
id: 33,
}, {
name: 'dell-66',
price: 200,
id: 12,
},
].reduce((res, obj) => {
res[obj.name] = {
item_price: (obj.name in res ? res[obj.name].item_price : 0) + obj.price
}
return res;
}, {})
console.log(items);Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
390 次 |
| 最近记录: |