简体   繁体   中英

Delete object from json tree by reference in JavaScript

I need to remove an object from an JSON tree. I know a reference to that object. Is there a nice way to do it via JavaScript or jQuery besides traversing the whole tree?

Example:

    party = {
    "uuid": "4D326531-3C67-4CD2-95F4-D1708CE6C7A8",
    "link": {
        "rel": "self",
        "href": "http://localhost:8080/cim/party/4D326531-3C67-4CD2-95F4-D1708CE6C7A8"
    },
    "type": "PERSON",
    "name": "John Doe",

    "properties": {
        "CONTACT": [            
            {
                "category": "CONTACT",
                "type": "EMAIL",
                "key": "email",
                "value": "john.doe@doe.at",
                "id": "27DDFF6E-5235-46BF-A349-67BEC92D6DAD"
            },
            {
                "category": "CONTACT",
                "type": "PHONE",
                "key": "mobile",
                "value": "+43 999 999990 3999",
                "id": "6FDAA4C6-9340-4F11-9118-F0BC514B0D77"
            }
        ],
        "CLIENT_DATA": [
            {
                "category": "CLIENT_DATA",
                "type": "TYPE",
                "key": "client_type",
                "value": "private",
                "id": "65697515-43A0-4D80-AE90-F13F347A6E68"
            }
        ]
    },
    "links": []
    }

And i have a reference: contact = party.properties.contact[1] . And I want to do something like delete contact .

它仅以一种方式起作用:变量持有引用,但是没有给定特定引用的方式来推断哪些变量持有引用(无需遍历它们并进行比较)。

You may delete it this way. I just tested it.

var party = {
    // ...
}

alert(party.properties.CONTACT[0]) // object Object
delete party.properties.CONTACT[0] // true
alert(party.properties.CONTACT[0]) // undefined

Fiddle

UPDATE

In the case above party is a direct property of window object

window.hasOwnProperty('party'); // true

and that's why you can't delete a property by reference. Anyhow, behavior of delete operator with host objects is unpredictable. Though, you may create a scope around the party object and then you'll be allowed to delete it.

var _scope = {};
var _scope.party = {
    // ...
};

var r = _scope.party.properties.CONTACT[0];
window.hasOwnProperty('party'); // false
alert(r) // object Object
delete r // true
alert(r) // undefined

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