JSON中的更新元素更新ALL

时间:2014-06-15 15:51:09

标签: javascript arrays json

我有一个JSON对象被解析,我正在尝试向下导航到SHIPPINGCOMMENTS并更新它,但是当我这样做时,它会更新所有具有该名称的单元格,而不仅仅是那个单元格。

{
    "id": 1402846607011,
    "status": "unsaved",
    "accounts": [
        {
            "compid": 919759,
            "compname": null,
            "products": [
                {
                    "BCINUM": "539504",
                    "ITEMUNIT": "EA",
                    "ORDERDETAILS": [
                        {
                            "SHIPDATEID": "69230",
                            "SHIPPERIODID": "2096",
                            "QUANTITY": "1"
                        },
                        {
                            "SHIPDATEID": "69231",
                            "SHIPPERIODID": "2096",
                            "QUANTITY": "2"
                        }
                    ],
                    "SHIPPINGCOMMENTS": "sooner"
                }
            ]
        },
        {
            "compid": 920001,
            "compname": null,
            "products": [
                {
                    "BCINUM": "539504",
                    "ITEMUNIT": "EA",
                    "ORDERDETAILS": [
                        {
                            "SHIPDATEID": "69230",
                            "SHIPPERIODID": "2096",
                            "QUANTITY": "1"
                        },
                        {
                            "SHIPDATEID": "69231",
                            "SHIPPERIODID": "2096",
                            "QUANTITY": "2"
                        }
                    ],
                    "POTEXT": "",
                    "SHIPPINGCOMMENTS": "sooner"
                }
            ]
        }
    ]
}

这是我的代码,我用它来循环:

function updateComments(compID,bcinum,comment) {
    var accounts = runningOrders.accounts;
    var n = accounts.length;
    for (i = 0; i < n; i++) {
        if (accounts[i].compid == compID) {
            var p = accounts[i].products.length;
            for (ii = 0; ii < p; ii++) {
                if (accounts[i].products[ii].BCINUM == bcinum) {
                    accounts[i].products[ii].SHIPPINGCOMMENTS = comment;
                }   
            }       
        }
    }
}

函数调用是:

updateComments(919759,539504,sooner);

1 个答案:

答案 0 :(得分:0)

两个潜在问题:

  1. 计算n时,实际上你没有计算acconts数组的大小?您的(JSON)对象的名称是什么?
  2. 在示例函数调用中,您将名称更改为两个对象中已定义的名称。这是一个错误吗?
  3. 此代码在node.js中为我工作:

    function updateComments(compID,bcinum,comment) {
      var n = accounts.accounts.length;
      console.log(n);
      console.log(accounts['accounts'][0].products);
      console.log(accounts['accounts'][1].products);
      for (i = 0; i < n; i++) {
        console.log('testing ', i, accounts.accounts[i].compid)
        if (accounts.accounts[i].compid == compID) {
          var p = accounts.accounts[i].products.length;
          console.log('Found compid', i, compID);
          for (ii = 0; ii < p; ii++) {
            if (accounts.accounts[i].products[ii].BCINUM == bcinum) {
              console.log('Found bcinum', ii, bcinum)
              accounts.accounts[i].products[ii].SHIPPINGCOMMENTS = comment;
            }
          }
        }
      }
      console.log(accounts['accounts'][0].products);
      console.log(accounts['accounts'][1].products);
    }
    
    accounts = {
    "id": 1402846607011,
    "status": "unsaved",
    "accounts":
     [
        {
            "compid": 919759,
            "compname": null,
            "products": [
                {
                    "BCINUM": "539504",
                    "ITEMUNIT": "EA",
                    "ORDERDETAILS": [
                        {
                            "SHIPDATEID": "69230",
                            "SHIPPERIODID": "2096",
                            "QUANTITY": "1"
                        },
                        {
                            "SHIPDATEID": "69231",
                            "SHIPPERIODID": "2096",
                            "QUANTITY": "2"
                        }
                    ],
                    "SHIPPINGCOMMENTS": "sooner"
                }
            ]
        },
        {
            "compid": 920001,
            "compname": null,
            "products": [
                {
                    "BCINUM": "539504",
                    "ITEMUNIT": "EA",
                    "ORDERDETAILS": [
                        {
                            "SHIPDATEID": "69230",
                            "SHIPPERIODID": "2096",
                            "QUANTITY": "1"
                        },
                        {
                            "SHIPDATEID": "69231",
                            "SHIPPERIODID": "2096",
                            "QUANTITY": "2"
                        }
                    ],
                    "POTEXT": "",
                    "SHIPPINGCOMMENTS": "sooner"
                }
            ]
        }
    ]
    }