在对象中查找json元素并将其删除

时间:2014-04-30 18:54:36

标签: jquery json

使用jquery,我将如何寻找JSON对象的索引。

以下是创建的内容:

[{"itemid":3,"itemName":"Some text here","itemPrice":"£2.40"},{"itemid":3,"itemName":"Some text here","itemPrice":"£2.40"},{"itemid":2,"itemName":"Some text here","itemPrice":"£2.40"}]

以下是它在控制台中的翻译方式:

[Object, Object, Object]
0: Object
itemName: "Some text here"
itemPrice: "£2.40"
itemid: 3
__proto__: Object
1: Object
itemName: "Some text here"
itemPrice: "£2.40"
itemid: 3
__proto__: Object
2: Object
itemName: "Some text here"
itemPrice: "£2.40"
itemid: 2
__proto__: Object
length: 3
__proto__: Array[0]

如果我想通过搜索itemid作为要查找的值来查看字符串,然后返回并使用splice从字符串中删除它,代码将是什么样子。我一直在犯奇怪的错误。

这是我的代码:

这会创建json字符串:     var item = {" itemid" :itemId," itemName" :itemName," itemPrice" :itemPrice};

cOrder.push(item);
localStorage.setItem('cOrder', JSON.stringify(cOrder));

在这里,我搜索字符串以获取要删除的正确元素:

var itemid = ($(this).text());
console.log(cOrder);
$.each(cOrder, function(key, value) {
    if(value.itemid == itemid) {
    // Here i need to get the index of the object //
    console.log(Object.keys(cOrder).indexOf(this));
    }
});

使用以上作为工作示例。如果我想删除itemid 3,我需要删除对象索引1(1:对象)

如何获取索引1,然后将其从字符串中删除?

提前致谢

1 个答案:

答案 0 :(得分:1)

对于数组,你不能在循环中从数组的开头开始并删除项目......如果这样做,循环计数器和索引将相互脱离。您可能需要创建第二个数组,并在循环期间将有效项添加到辅助数组。

与id匹配的项目:

var validItems = [];
$.each(cOrder, function(key, value) {
    if(value.itemid == itemid) {
        validItems.push(value);
    }
});

与id不匹配的项目:

var validItems = [];
$.each(cOrder, function(key, value) {
    if(value.itemid != itemid) {
        validItems.push(value);
    }
});

或两者:

var validItems = [];
var invalidItems = [];
$.each(cOrder, function(key, value) {
    if(value.itemid == itemid) 
        validItems.push(value);
    else
        invalidItems.push(value);
});

<强>更新

这可能有助于您的数量问题。您必须向对象添加itemQuantity属性才能支持此属性。使用该属性,您可以创建如下函数:

//quantity can be positive or negative
function adjustItemQuantity(itemId, quantity, remove) {
    //if no quantity, or quantity==0, and not remove then nothing to do here
    if (!quantity && !remove) return;

    //create the temporary array
    var validItems = [];

    $.each(cOrder, function(key, value) {
        if(value.itemid == itemId) {
            var newQuantity = value.itemQuantity + quantity;

            //remove if quantity 0 or less
            if (newQuantity > 0 && !remove)
                validItems.push(value);
        } else {
            //add the other, non-matching items to the array
            validItems.push(value);
        }
    });

    //set the main array to the new result
    cOrder = validItems;
}