javascript - 使用新键更新多维数组,如果存在或创建新的值对象

标签 javascript jquery arrays

我有一个数组是

    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/

相关文章:

javascript - knockout 绑定(bind)元素到 Bootstrap 菜单

javascript - 如何对 jQuery 中的选择器返回的值进行折叠?

java - 我如何将数组转换为数组列表并对其进行更改以反射(reflect)在数组中?

JavaScript/jQuery JSON 数组问题 - 值未定义

javascript - 将 html 中的文本 append 到不同的部分

javascript - 通过 CSS 过渡淡入效果不正常

javascript - session 存储在 window.location.replace 上丢失

javascript - 如何在新窗口中打开当前页面

php - 用 php 标记图像

javascript - 检测对象数组中是否存在属性值