I have a services object that I need to append it's logs to where the ServiceLogEntries.ID equals the ServiceID.
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
}
]
};
The result should look like the code below where the element "ServiceLogEntires" was created with it's corresponding items appended.
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
}
]
}
]
I started looping through the objects which was easy enough but I need to get the whole element "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);
}
}
}
Services.result.forEach(function (service) {
service.ServiceLogEntries = ServiceLogEntries.ServiceLogEntries.filter(function (entry) {
return entry.ID === service.ID;
});
});
try this
$(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>
You work with objects like dictionaries, not arrays, in javascript, so your loop becomes
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;
}
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.