2016-01-21 54 views
-1

我有一个服务对象,我需要将它的日志附加到ServiceLogEntries.ID等于ServiceID的地方。如何将元素添加到JavaScript对象?

var Services = { 
      "result": [ 
       { 
        "ID": 150779, 
        "ServiceRenderedID": 1, 
        "ServiceTypeName": "Health Risk Assessment", 
        "PackageID": 13 
       }, 
       { 
        "ID": 150778, 
        "ServiceRenderedID": 1, 
        "ServiceTypeName": "Health Risk Assessment", 
        "PackageID": 13 
       } 
      ] 
     }; 

var ServiceLogEntries = { 
      "ServiceLogEntries": [ 
       { 
        "LogID": 229500.0, 
        "LogStamp": "2015-12-08T18:29:16.137", 
        "LogServerUser": "Webuser", 
        "LogActionType": "I", 
        "ID": 150779 
       }, 
       { 
        "LogID": 229501.0, 
        "LogStamp": "2015-12-08T18:30:07.32", 
        "LogServerUser": "Webuser", 
        "LogActionType": "U", 
        "ID": 150779 
       }, 
       { 
        "LogID": 229500.0, 
        "LogStamp": "2015-12-08T18:29:16.137", 
        "LogServerUser": "Webuser", 
        "LogActionType": "I", 
        "ID": 150778 
       }, 
       { 
        "LogID": 229501.0, 
        "LogStamp": "2015-12-08T18:30:07.32", 
        "LogServerUser": "Webuser", 
        "LogActionType": "U", 
        "ID": 150778 
       } 
      ] 
     }; 

结果应该看起来像下面的代码,其中元素“ServiceLogEntires”是通过附加相应的项目创建的。

var Service = { 
      "result": [ 
       { 
        "ID": 150779, 
        "ServiceRenderedID": 1, 
        "ServiceTypeName": "Health Risk Assessment", 
        "PackageID": 13 
       }, 
       { 
        "ID": 150778, 
        "ServiceRenderedID": 1, 
        "ServiceTypeName": "Health Risk Assessment", 
        "PackageID": 13, 
        "ServiceLogEntries": [ 
         { 
          "LogID": 229500.0, 
          "LogStamp": "2015-12-08T18:29:16.137", 
          "LogServerUser": "Webuser", 
          "LogActionType": "I", 
          "ID": 150778 
         }, 
         { 
          "LogID": 229501.0, 
          "LogStamp": "2015-12-08T18:30:07.32", 
          "LogServerUser": "Webuser", 
          "LogActionType": "U", 
          "ID": 150778 
         } 
        ] 
       } 
      ] 

我开始通过这是很容易做到的对象循环,但我需要得到整个元素"ServiceLogEntries": [{...}]

for (var i = 0; i < Service.result.length; i++) { 
      var parent = Service.result[i]; 
      for (var a = 0; a < ServiceLogEntries.ServiceLogEntries.length; a++) { 
       var child = ServiceLogEntries.ServiceLogEntries[a]; 

       if (child.ID === parent.ID) { 
        parent.push(child); 
       } 
      } 
     } 
+0

和WH结果你会得到什么?你知道jsfiddle吗? – helle

+0

https://jsfiddle.net/t3twxgfs/ –

回答

2
Services.result.forEach(function (service) { 
    service.ServiceLogEntries = ServiceLogEntries.ServiceLogEntries.filter(function (entry) { 
     return entry.ID === service.ID; 
    }); 
}); 
1

你有像字典对象,它可不是阵列中,JavaScript,因此你的循环变得

for (var i = 0; i < Service.result.length; i++) { 
      var parent = Service.result[i]; 
      for (var a = 0; a < ServiceLogEntries.ServiceLogEntries.length; a++) { 
       var child = ServiceLogEntries.ServiceLogEntries[a]; 

       if (child.ID === parent.ID) { 
        parent.ServiceLogEntries = child; 
       } 
      } 
     } 
2

试试这个

$(function() { 
 

 
    var Services = { 
 
    "result": [{ 
 
     "ID": 150779, 
 
     "ServiceRenderedID": 1, 
 
     "ServiceTypeName": "Health Risk Assessment", 
 
     "PackageID": 13 
 
    }, { 
 
     "ID": 150778, 
 
     "ServiceRenderedID": 1, 
 
     "ServiceTypeName": "Health Risk Assessment", 
 
     "PackageID": 13 
 
    }] 
 
    }; 
 

 
    var ServiceLogEntries = { 
 
    "ServiceLogEntries": [{ 
 
     "LogID": 229500.0, 
 
     "LogStamp": "2015-12-08T18:29:16.137", 
 
     "LogServerUser": "Webuser", 
 
     "LogActionType": "I", 
 
     "ID": 150779 
 
    }, { 
 
     "LogID": 229501.0, 
 
     "LogStamp": "2015-12-08T18:30:07.32", 
 
     "LogServerUser": "Webuser", 
 
     "LogActionType": "U", 
 
     "ID": 150779 
 
    }, { 
 
     "LogID": 229500.0, 
 
     "LogStamp": "2015-12-08T18:29:16.137", 
 
     "LogServerUser": "Webuser", 
 
     "LogActionType": "I", 
 
     "ID": 150778 
 
    }, { 
 
     "LogID": 229501.0, 
 
     "LogStamp": "2015-12-08T18:30:07.32", 
 
     "LogServerUser": "Webuser", 
 
     "LogActionType": "U", 
 
     "ID": 150778 
 
    }] 
 
    }; 
 

 
    $.each(Services.result, function(i, service) { 
 
    service['ServiceLogEntries'] = ServiceLogEntries.ServiceLogEntries.filter(function(elem) { 
 
     return elem.ID === service.ID; 
 
    }); 
 
    }) 
 

 
    console.log(Services); 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

'.filter()'通过返回true或false来工作,你可以将它减少到'return elem.ID === service.ID;'。 – Tomalak

+0

哦,那是真的!谢谢......与地图功能混淆 – Vanojx1

+1

另外,'Services.result [i]'和'service'是一样的。 ;) – Tomalak

相关问题