我有一個看起來像這樣的陣列(簡化):
[
{
name: 'Store1',
price: ['10'],
somethingElse: null
},
{
name: 'Store2',
price: ['5'],
somethingElse: 6
},
{
name: 'Store2',
price: ['15'],
somethingElse: 6
},
]
我需要把它變成這樣:
[
{
name: 'Store1',
price: ['10'],
somethingElse: null
},
{
name: 'Store2',
price: ['5', '15'],
somethingElse: 6
},
]
因此,對于每個name相同的物件,它都將price's 用于所有物件并將它們放入一個陣列中,并將相同的條目數量減少name到一個。
它需要為更長的陣列作業,并與許多name's 一起作業。
讓我們假設price每個具有相同 的物件中除了 之外的所有內容都是相同的name。
我已經嘗試使用太久array.reduce但沒有運氣。
uj5u.com熱心網友回復:
const input = [
{
name: 'Store1',
price: ['10'],
somethingElse: null
},
{
name: 'Store2',
price: ['5'],
somethingElse: 6
},
{
name: 'Store2',
price: ['15'],
somethingElse: 6
},
]
const output = input.reduce((a,c) => {
if(a.find(i => i.name === c.name)) { // Check if 'name' already exist
return a.map(el => el.name === c.name ? ({...el, price: [...el.price, ...c.price]}) : el) // updating price for existed name
} else {
return [...a, c] // no such name, should add to ouput result
}
}, [])
console.log(output)
uj5u.com熱心網友回復:
您可以通過哈希方法使用分組:
const data = [{"name":"Store1","price":["10"],"somethingElse":null},{"name":"Store2","price":["5"],"somethingElse":6},{"name":"Store2","price":["15"],"somethingElse":6}];
const result = Object.values(data.reduce((acc, obj) => {
acc[obj.name] ??= obj;
if (!acc[obj.name].price.includes(...obj.price))
acc[obj.name].price.push(...obj.price);
return acc;
}, {}));
console.log(result);
.as-console-wrapper{min-height: 100%!important; top: 0}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/444855.html
標籤:javascript 数组
