最近在我的申请中,我遇到了来自javascript的 splice()的问题,我告诉你原因。
场景:用户可以将产品添加到阵列(购物车),并将所有产品存储在json对象数组中。如果用户想要使用“splice(index,1)”删除特定产品,则删除具有要从数组中删除的指定索引的元素。
编辑:例如我有这个数组
Products: [{ID: 1, Product: Cake, Qty: 2},{ID:2, Product: Donut, Qty: 1}]
因此在数组中有索引[0]和索引[1]。当我使用splice()从index [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);
});
}
但出于某种原因,如果我尝试从数组中删除数量大于1的元素(在函数AddItem()的代码之后),它“删除”该元素但它仍然显示为现存(甚至如果数量更新后我只有一个元素
很抱歉这个错误的解释,我不是母语为英语的人,所以我很难更好地解释它。 编辑我简化了我的问题,希望得到这个帮助。
EDIT2:我认为问题是splice()之后索引的顺序。我没有意识到每次拼接后索引都会改变,但是我将输出保持为相同,所以有时候我试图删除超出范围的索引o不存在。我的错。 感谢您的帮助,对不起我的糟糕问题。我会尝试改进
答案 0 :(得分:0)
请参阅:
// 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控制台中这样做了,这就是你问的问题吗?