简体   繁体   中英

How do I add an element to a javascript object?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM