Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中通过引用从json树中删除对象_Javascript_Jquery_Json - Fatal编程技术网

在JavaScript中通过引用从json树中删除对象

在JavaScript中通过引用从json树中删除对象,javascript,jquery,json,Javascript,Jquery,Json,我需要从JSON树中删除一个对象。我知道有人提到过那个物体。除了遍历整个树之外,还有没有一种通过JavaScript或jQuery实现的好方法 例如: party = { "uuid": "4D326531-3C67-4CD2-95F4-D1708CE6C7A8", "link": { "rel": "self", "href": "http://localhost:8080/cim/party/4D326531-3C67-4CD2-95F

我需要从JSON树中删除一个对象。我知道有人提到过那个物体。除了遍历整个树之外,还有没有一种通过JavaScript或jQuery实现的好方法

例如:

    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": []
    }

我有一个参考资料:
contact=party.properties.contact[1]
。我想做一些类似于删除联系人的事情,它只有一种工作方式:一个变量持有一个引用,但是没有办法给出一个特定的引用来推断哪些变量持有它(不经过迭代和比较)。

你可以这样删除它。我刚测试过

var party = {
    // ...
}

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

更新

在上述情况下,
参与方
窗口
对象的直接属性

window.hasOwnProperty('party'); // true
这就是为什么不能通过引用删除属性。无论如何,delete操作符对宿主对象的行为是不可预测的。但是,您可以围绕
参与方
对象创建一个范围,然后允许您删除它

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

好的,这就是为什么要通过引用从和数组中查找项索引。例如
find(party.properties.contact,ctc)=1
其中
ctc=party.properties.contact[1]
@Marius:yep,只需迭代数组并进行比较。是的,这很有效,但我无法使用引用。无论如何,我可以这样做:
var-properties=$scope.party.properties[category];var propIdx=$.inArray(属性,属性);特性.拼接(propIdx,1)@Marius检查更新的答案。我相信现在一切都清楚了:)