Javascript 减去几个乘积的数量和数组。拼接不是函数

Javascript 减去几个乘积的数量和数组。拼接不是函数,javascript,ecmascript-6,Javascript,Ecmascript 6,问题在于减法量函数。例如,当我添加两个产品时,我单击了第一个产品的减法数量按钮,第二个产品也会减法其数量。它应该是第一个减去数量的产品,因为我点击了第一个产品的减去数量按钮。第二个问题是当数量为0时,它应该自动删除产品,但错误表明array.splice不是函数。PS:我正在使用ECMASCRIPT 6,所以如果我没有使用ECMASCRIPT 6,或者我的代码中有什么需要改进的地方,请随时指导我 const cart={}; 函数AddtoCart(产品ID、说明、数量、价格){ if(购物车

问题在于减法量函数。例如,当我添加两个产品时,我单击了第一个产品的减法数量按钮,第二个产品也会减法其数量。它应该是第一个减去数量的产品,因为我点击了第一个产品的减去数量按钮。第二个问题是当数量为0时,它应该自动删除产品,但错误表明array.splice不是函数。PS:我正在使用ECMASCRIPT 6,所以如果我没有使用ECMASCRIPT 6,或者我的代码中有什么需要改进的地方,请随时指导我

const cart={};
函数AddtoCart(产品ID、说明、数量、价格){
if(购物车[productid]){
购物车[productid]。数量+=数量;
}否则{
购物车[productid]={
id:productid,
描述:,
数量:数量,
价格:价格
};
}
calculateGrandTotal();
document.getElementById(“total”).innerHTML=GrandTotal;
控制台日志(总计);
viewCart();
}
函数数量(productid){
如果(购物车[productid]。数量>0){
购物车[productid]。数量--;
}
如果(购物车[productid]。数量==0){
删除购物车[productid]//从购物车中删除返回false;
}
viewCart();
}
函数calculateGrandTotal(){
GrandTotal=0;
for(让productid进入购物车){
if(cart.hasOwnProperty(productid)){
GrandTotal+=parseFloat(购物车[productid]。价格)*parseInt(购物车[productid]。数量);
}
}
}
函数viewCart(){
让tbody=document.getElementById('cartsBody');
tbody.innerHTML='';
Object.values(cart.forEach)(内容=>{
tbody.innerHTML+=`${content.id}
${content.desc}
${content.qty}
${content.price}
${content.qty*content.price}
减去数量`;
}); 
}

产品ID
产品说明
量
价格
全部的
总数:

而不是:

cart.splice()
使用:

拼接用于阵列,另一种解决方案是将购物车变成阵列:

const cart = []
编辑

对于第一个问题,不是通过所有购物车属性进行迭代,而是发送要降低成本的商品的id:

onClick='subtractQuantity(' +content.id+')'
在减法函数中,只需减少或删除:

function subtractQuantity(productid){

    if(cart.hasOwnProperty(productid)){
        cart[productid].qty--;
    }
    if (cart[productid].qty == 0) {
            delete cart[productid]//Remove     from cart

}
calculateGrandTotal();
viewCart();

}
拼接
数组
对象的一种方法。如果要在类似数组的结构上使用它

Array.prototype.splice.call(购物车,产品ID,1)

至于从购物车中删除条目,您必须将
this
(您要减少其数量的产品)传递给处理程序
onClick='subtractQuantity(this)
和函数声明
function subtractQuantity(this)


ps:如何应用这些说明取决于您。祝你好运

工作解决方案

const cart={};
函数AddtoCart(产品ID、说明、数量、价格){
if(购物车[productid]){
购物车[productid]。数量+=数量;
}否则{
购物车[productid]={
id:productid,
描述:,
数量:数量,
价格:价格
};
}
document.getElementById(“total”).innerHTML=calculateGrandTotal();
控制台日志(总计);
viewCart();
}
函数数量(productid){
如果(购物车[productid]。数量>0){
购物车[productid]。数量--;
}
如果(购物车[productid]。数量==0){
删除购物车[productid]//从购物车中删除返回false;
}
document.getElementById(“total”).innerHTML=calculateGrandTotal();
viewCart();
}
函数calculateGrandTotal(){
GrandTotal=0;
for(让productid进入购物车){
if(cart.hasOwnProperty(productid)){
GrandTotal+=Number.parseFloat(购物车[productid].price)*Number.parseInt(购物车[productid].qty);
}
}
返回总计;
}
函数viewCart(){
让tbody=document.getElementById('cartsBody');
tbody.innerHTML='';
Object.values(cart.forEach)(内容=>{
tbody.innerHTML+=`${content.id}
${content.desc}
${content.qty}
${content.price}
${content.qty*content.price}
减去数量`;
}); 
}

产品ID
产品说明
量
价格
全部的
总数:

我认为这是因为cart是一个对象,而splice是用于arrays@AshtonMorgan. 是的,这就是问题所在。你能帮我吗?阿什顿说的没错。不能拼接对象属性。改为使用“删除”或为购物车创建数组。@Janne。你能帮我吗?请尝试删除购物车[ProdudProductId],而不是拼接。这将删除对象属性。抱歉,我不知道如何应用此属性。你能帮我做Array.prototype.splice.call(cart,productid,1)吗?我有一个输入错误,它的productid不是producty,它现在可以工作了,但是第一个问题还没有解决。请检查我上面的问题。总计在减去数量时不更新下面的总计在单击减去数量时不更新。请检查是否已编辑snippet@Joseph:现在!满意吗D@Joseph:我为什么要那样做?只有经常被问到的问题才应该被投票表决
function subtractQuantity(productid){

    if(cart.hasOwnProperty(productid)){
        cart[productid].qty--;
    }
    if (cart[productid].qty == 0) {
            delete cart[productid]//Remove     from cart

}
calculateGrandTotal();
viewCart();