簡體   English   中英

Javascript:如何使用Reduce來獲得新的對象數組

[英]Javascript: How to use Reduce to get New Array of Objects

我是編碼的新手,所以這可能是一個簡單的問題,但我無法理解。 我有一系列所有最好的餡餅,每個都有自己的價格:

pieArr = [blueberry, strawberry, pumpkin, apple]

我想創建一個對象數組,以根據餅圖的價格顯示購物車的總量,並且這里有人在堆棧溢出時建議我使用reduce。

這是我到目前為止的內容:

var total = 0;

const totalArr = pieArr.reduce((totalPrice, pie) => {
  if ( pie === "blueberry") {
    total += 2.5;
    totalPrice.push({["cartTotal"]:total});
    return totalPrice;
  }
 else if (pie === "apple") {
   total += 2;
   totalPrice.push({["cartTotal"]:total});
   return totalPrice;
 }, 
 [])};

我希望最終結果是一個不斷添加新總數的對象新數組:

[{cartTotal:2.5},{cartTotal:4.5}]

創建了新的對象數組,但未將總數相加,因此最終兩次的總數均為0:

[{cartTotal: 0},{cartTotal: 0}]

我究竟做錯了什么?

一個不錯的方法是進行價格查詢,例如:

let piePrices = {
    blueberry: 2.25,
    strawberry: 1.5, 
    pumpkin: 3,
    apple: 2
}

然后,您可以在map()使用它reduce()如果您只是從一個數組中創建一個數組,它比reduce()更好),而沒有所有if/else噪聲:

 let piePrices = { blueberry: 2.25, strawberry: 1.5, pumpkin: 3, apple: 2 } let pieArr = ['blueberry', 'strawberry', 'pumpkin', 'apple'] let total = 0 let totalPrice = pieArr.map(pie => ({cartTotal: total += piePrices[pie]})) console.log(totalPrice) 

 const total = 0; let pieArr = ['blueberry', 'strawberry', 'pumpkin', 'apple'] const totalArr = pieArr.reduce((totalPrice, pie) => { let foundPie = totalPrice.find(x => x.name === pie) || {name: pie, total: 0}; if ( pie === "blueberry") { foundPie.total += 2.5; } else if (pie === "apple") { foundPie.total += 2; } if(!totalPrice.some(x=>x.name === pie)){ totalPrice.push(foundPie) } return totalPrice; }, []); console.log(totalArr) 

我建議添加另一個屬性name以使圖片更清晰。 在我們reducing ,從累積的totalPrice數組中找到餅,然后進行求和,並檢查是否將元素推送到累積的數組中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM