使用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,然后将其从字符串中删除?
提前致谢
答案 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;
}