[英]how to split an object to multiple objects inside an array efficiently
我有一個示例數組bunch
作為
let bunch = [{fruit: "apple" , quantity: 1},{fruit: "banana" , quantity: 3}]
我正在嘗試將 object 拆分為其數量時間 --> 如果fruit
是banana
且quantity
> 1
為:
//newBunch --> [{fruit: "apple" , quantity: 1},{fruit: "banana" , quantity: 1},{fruit: "banana" , quantity: 1},{fruit: "banana" , quantity: 1}]
我嘗試使用 reduce 作為:
let bunch = [{fruit: "apple", quantity: 1},{fruit: "banana", quantity: 3}] let res = bunch.reduce((acc,curr)=>{ if(curr.quantity > 1 && curr.fruit==='banana'){ var arr = [] for(let i=0; i < curr.quantity; i++){ var fr = {} fr.fruit = 'banana'; fr.quantity = 1; arr.push(fr) } acc.push(...arr) } else{ acc.push(curr) } return acc },[]) console.log(res)
我使用上面的代碼片段得到了預期的 o/p,但是會有一種有效的方法來做到這一點(可能代碼更少),或者你會建議 go 使用當前的解決方案嗎? 請指導我。 TIA
您可以使用.forEach()
方法遍歷數組,然后根據quantity
屬性的值創建新對象。 您可以將這些新創建的對象推送到另一個包含所有對象的數組中。
let bunch = [ { fruit: 'apple', quantity: 1 }, { fruit: 'banana', quantity: 3 }, ]; const result = []; bunch.forEach(obj => { for (let i = 1; i <= obj.quantity; i++) { result.push({...obj, quantity: 1 }); } }); console.log(result);
您可以使用flatMap和Array.prototype.fill
let bunch = [{fruit: "apple" , quantity: 1},{fruit: "banana" , quantity: 3}]
let result = bunch.flatMap((fruit) => {
return Array(fruit.quantity).fill({ ...fruit, quantity: 1})
})
您可以使用Array.prototype.reduce()
來遍歷您的源數組。
Array()
構造函數准備大小為quantity
的稀疏數組Array.prototype.fill()
和Array.prototype.map()
組合用具有屬性fruit
的對象填充上面的數組, 等於源 object和屬性quantity
設置為1
(這種方法比簡單地使用.fill .fill()
對於非原始數據類型項,如對象)Array.prototype.push()
與傳播語法一起使用,將結果數組的所有項目推入.reduce()
累加器 const src = [{fruit: "apple", quantity: 1},{fruit: "banana", quantity: 3}], result = src.reduce((acc, {fruit, quantity}) => { acc.push(...Array(quantity).fill().map(_ => ({ fruit, quantity: 1 })) ) return acc }, []) console.log(result)
.as-console-wrapper{min-height:100%;}
我建議使用Array.prototype.flatMap()
和Array.from()
let bunch = [ { fruit: 'apple', quantity: 2 }, { fruit: 'banana', quantity: 3 }, { fruit: 'starfruit', quantity: 1 }, ]; const splitBunches = bunch.flatMap((fruit) => ( Array.from({ length: fruit.quantity }, () => ({...fruit, quantity: 1 })) )) console.log(splitBunches)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.