2017-08-17 83 views
-3

我試圖執行一個簡單的forEach循環。Javascript:錯誤forEach

if (this.list.length == 0) { 
    this.list.push({ name, price, familly, quantity }) 
} else { 
    this.list_achat.forEach((element) => { 
     if (element.name === name && element.familly === familly) { 
      element.quantity += quantity 
     } else { 
      this.list.push({ name, price, familly, quantity }) 
     } 
     this.prix_totale += element.quantity * element.price 
    }) 
} 

當我第一次添加一個產品在list_achat加時list_achat.length == 0,但是當我添加另一個產品,會發生什麼

[ 
    {"name":"prod1","price":"10","familly":"famille1","quantity":"4"}, 
    {"name":"prod2","price":"10","familly":"famille1","quantity":"3"}, 
    {"name":"prod2","price":"10","familly":"famille1","quantity":"2"}, 
    {"name":"prod2","price":"10","familly":"famille1","quantity":1} 
] 

我只想保留

[ 
    {"name":"prod1","price":"10","familly":"famille1","quantity":"4"}, 
    {"name":"prod2","price":"10","familly":"famille1","quantity":"3"} 
] 

可能是什麼問題?

+1

尋求幫助時,請走可以一次一次地對代碼進行格式化和縮進。 (當*不*請求幫助時,這是一個好主意。) –

回答

0

您正在每次添加到數組forEach回調被調用(這是每個元素)。

你可能尋找Array.prototype.find,它返回它的回調函數返回一個truthy值數組中的第一個元素(或undefined如果沒有找到):

const entry = this.list.find(e => e.name == name && e.familly == familly); 
if (!entry) { 
    this.list.push({name,price,familly,quantity}) 
} else { 
    entry.quantity += quantity; 
} 
+0

哇!多謝了!並抱歉代表我的代碼 – Afnor