Javascript 修改数组后如何从数组中删除元素

Javascript 修改数组后如何从数组中删除元素,javascript,arrays,json,Javascript,Arrays,Json,最近在我的应用程序中,我遇到了来自javascript的splice()问题,我告诉你原因 场景:用户可以将产品添加到一个数组(购物车),Im将所有产品存储在一个json对象数组中。如果用户想要删除特定的产品im,请使用“拼接(索引,1)”从阵列中删除具有指定索引的元素 编辑:例如,我有这个数组 Products: [{ID: 1, Product: Cake, Qty: 2},{ID:2, Product: Donut, Qty: 1}] 因此,在数组中有索引[0]和索引[1]。当我使用s

最近在我的应用程序中,我遇到了来自javascript的splice()问题,我告诉你原因

场景:用户可以将产品添加到一个数组(购物车),Im将所有产品存储在一个json对象数组中。如果用户想要删除特定的产品im,请使用“拼接(索引,1)”从阵列中删除具有指定索引的元素

编辑:例如,我有这个数组

Products: [{ID: 1, Product: Cake, Qty: 2},{ID:2, Product: Donut, Qty: 1}]

因此,在数组中有索引[0]和索引[1]。当我使用splice()从索引[0](其中是Cake)中删除元素时,它不会删除元素,有时会删除,我不知道为什么。这是从数组中删除元素的函数

function DeleteProduct(indexArray) {
//index array is send from $.each function I have to print the elements of the array
        ShoppingCart.ShoppingCartItems.splice(indexArray, 1);

        //Im removing the <tr> tag from a table, and the index help me to do it and everything here is fine
        $("#tr" + indexArray).remove();


        $.each(ShoppingCart.ShoppingCartItems, function (index, Products) {
            //After splice I will have the option to recalculate the total of the purchase
            var Total = Number(Products.Precio) * Number(Products.Cantidad);

        });
      }
函数DeleteProduct(indexArray){
//索引数组是从$发送的。每个函数我都必须打印数组的元素
ShoppingCart.ShoppingCartItems.拼接(索引,1);
//我正在从一个表中删除标记,索引帮助我做到这一点,这里的一切都很好
$(“#tr”+索引数组).remove();
$.each(ShoppingCart.ShoppingCart项目、功能(索引、产品){
//拼接后,我可以选择重新计算购买总额
var总计=数量(Products.Precio)*数量(Products.Cantidad);
});
}
但由于某种原因,如果我试图从数组中删除数量大于1的元素(在函数AddItem()的代码之后),它会“删除”该元素,但它仍然存在(即使在数量更新之后,我只有一个元素)

对不起,解释得不好,我不是以英语为母语的人,所以我很难更好地解释。 编辑我简化了我的问题,希望对你有所帮助

EDIT2:我认为问题在于splice()之后索引的顺序。我没有意识到每次拼接后索引都会发生变化,但我将输出保持不变,因此有时我尝试删除超出范围或不存在的索引。我的错误。 谢谢你的帮助,很抱歉我的问题。我将尝试改进

请参见:

// Your array

> x = [{ID: 1, Product: 'Cake', Qty: 2},{ID:2, Product: 'Donut', Qty: 1}]
=> [Object, Object]


// I remove the first element

> x.shift()
=> Object {ID: 1, Product: "Cake", Qty: 2}


// I "print" the array with the first element removed
> x
[ Object
  ID: 2
  Product: "Donut"
  Qty: 1
  __proto__: Object
]

我是在Chrome控制台上做的,这就是你要问的吗?

你能试着简化你的问题吗?谢谢你的回答,我简化了我的问题,希望能更具体一些。是的,但这个数组是“静态”的,因为蛋糕的数量是2,但我做的整个过程是:1。添加产品蛋糕(创建阵列的位置)2。如果产品蛋糕与已经存在的蛋糕相同,它会将其数量更新为原始数组(蛋糕=2)3。如果我想使用splice()删除或删除,代码中会出现一些问题,有时它看起来只是从数组中减去数量,而不是元素。希望我能说清楚谢谢你的时间juanpastas,问题是我的逻辑,没有意识到在每次拼接()之后,数组将更改数组的索引。谢谢