对象值未在for循环中更改

时间:2019-05-29 17:37:03

标签: javascript node.js

我有以下代码:

 for (var item in oldMenu) {
   var newid = newID();
   oldMenu[item].nodeId = newid;
   db.selectDatas('pages','',{'datas.menu': item.nodeId},null,null,null,null, function(err1, page) {
     if(page.length > 0) {
       var oldPage = page[0].datas;
         oldPage.menu = newid;
       }
   });

oldMenu变量的样本数据:

[
  {
    "nodeId": "e9c2b2a4-4583-eff9-d0de-bc4d7d2bf50f",
    "nodeText": "Présentation",
    "hasChildren": true,
    "count": 0,
    "expanded": true
  },
  {
    "nodeId": "be225e39-9848-913a-1b18-0f3995e2199a",
    "nodeText": "Installation",
    "hasChildren": true,
    "expanded": true
  },
  {
    "nodeId": "aa41e413-be60-460f-dbbe-84284245414b",
    "nodeText": "Premier lancement"
  }
]

问题是未更改的nodeId字段没有按预期的新值进行更改,我缺少了什么?

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您在item.nodeId查询中使用selectDatas时应使用oldMenu[item].nodeId。但是,您在上面的行中覆盖了该值,因此它可能会返回0个结果。

这就是我认为代码应该是的:

for (var item of oldMenu) {
   var oldId = item.nodeId;

   var newid = newID();
   item.nodeId = newid;

   db.selectDatas('pages','',{'datas.menu': oldId},null,null,null,null, function(err1, page) {
     if(page.length > 0) {
       var oldPage = page[0].datas;
         oldPage.menu = newid;
       }
   });
}