2017-08-17 82 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