我有一个数组是
var mycart = [{"id":"1","quantity":"10"},{"id":"6","quantity":"20"},{"id":"3","quantity":"30"},{"id":"4","quantity":"40"}];
//new id's which should be updated
var newid = "6";
var newquantity = "5";
每次更新购物车时我都想更新 id 和值,如果 id 存在我需要更新数量如果没有我必须创建一个新的 id,数量对象。 现在,我正在添加 newid,它是 6,正如你所看到的 id=6 存在于数组中,所以它应该像这样更新 -
for(var x=0; x < mycart.length; x++){
if(mycart[x].id == newid ){
var tmpq = mycart[x].quantity;
mycart[x].quantity = parseInt(tmpq) + parseInt(q);
}
else{
alert(mycart[x].id+' = this is not what you are searching');
}
}
现在的输出是:
var mycart = [{"id":"1","quantity":"10"},{"id":"6","quantity":"25"},{"id":"3","quantity":"30"},{"id":"4","quantity":"40"}];
现在我需要帮助来创建新对象,如果 mycart 数组中不存在该 id。
- 如果我使用
//new id's which should be created var newid = "2"; var newquantity = "15"; var temparr = new Array(); var tmpobj ={}; tmpobj["id"]= newid ; tmpobj["quantity"] = newquantity ; temparr.push(tmpobj); mycart.push(temparr);
在 for 循环中,它将创建 mycart.length
次,然后我必须使用 $unique() jQuery API
进行过滤,这是一个糟糕的方法。
如果不存在,我需要用 id:value,quantity:value
创建新对象,如果存在则更新。更新部分工作,创建部分不能,
最佳答案
使用变量来检测您是否找到了旧项目:
var found = false;
for(var x=0; x < mycart.length; x++){
if(mycart[x].id == newid ){
var tmpq = mycart[x].quantity;
mycart[x].quantity = parseInt(tmpq) + parseInt(q);
found = true;
break;
}
}
if (!found) {
mycart.push ({ id: newid, quantity: newquantity });
}
如果您将 mycart
设为一个以 ID 为键的对象,就会更简单,这样您就不必进行线性搜索。它会是这样的:
var mycart = {
"1": { quantity: 10 },
"6": { quantity: 20 },
...
};
那么你的代码将是:
if (mycart.hasOwnProperty(newid)) {
mycart[newid] += newquantity;
} else {
mycart[newid] = { quantity: newquantity };
}
关于javascript - 使用新键更新多维数组,如果存在或创建新的值对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27660622/