gpt4 book ai didi

javascript - 按 ID 删除对选定对象的对象引用

转载 作者:行者123 更新时间:2023-12-02 16:27:25 28 4
gpt4 key购买 nike

我有一个节点系统,它存储了一堆连接到其他节点的节点。数据结构如下:

[
{"id":0,"x":1,"y":2, "linksTo":[1]},
{"id":1,"x":3,"y":4, "linksTo":[0,2,3]},
{"id":2,"x":5,"y":6, "linksTo":[1,4]},
{"id":3,"x":3,"y":10,"linksTo":[1,4]},
{"id":4,"x":5,"y":12,"linksTo":[2,3]}
]

我想要做的是删除某个节点,以及可能根据其 ID“链接”到该节点的其他节点中对该节点的所有引用。

我已经可以使用此函数获取我需要的节点了:

function getNode(id, y){
var x;
if(y){ x = id; }
if(x && y){
var nodeAtPos = false;

Object.keys(paths.list).forEach(function(i){
if(paths.list[i].x == x && paths.list[i].y == y){
nodeAtPos = paths.list[i];
return false;
}
return true;
});
return nodeAtPos;
}
return paths.list[id];
}
function deleteNode(x,y){
var obj = getNode(x,y);
//need to delete obejct and delete key references in other objects that were connected to it
}

deleteNode(5,12);

最终结果在我的数据结构中如下所示:

[
{"id":0,"x":1,"y":2, "linksTo":[1]},
{"id":1,"x":3,"y":4, "linksTo":[0,2,3]},
{"id":2,"x":5,"y":6, "linksTo":[1]}, //changed
{"id":3,"x":3,"y":10,"linksTo":[1]}, //changed
]

但是正如您在我的数据结构中看到的,如果我只是删除它,我仍然有一些 linksTo 到它的节点需要清理。否则它们将链接到不存在的节点。

最简单的方法是什么?

最佳答案

您可以迭代每个对象并执行以下操作:

  • 检查节点是否有指向它的链接。如果是这样,请将其从其链接到
  • 在迭代过程中,跟踪具有以下特征的节点的索引:其 id 作为要删除的节点。
  • 迭代完成后,从数组中删除该节点。

代码:

var x = [
{"id":0,"x":1,"y":2, "linksTo":[1]},
{"id":1,"x":3,"y":4, "linksTo":[0,2,3]},
{"id":2,"x":5,"y":6, "linksTo":[1,4]},
{"id":3,"x":3,"y":10,"linksTo":[1,4]},
{"id":4,"x":5,"y":12,"linksTo":[2,3]}
];

var index = -1;
var toDel = 2;
for(var i=0;i<x.length;i++){
if(x[i]["linksTo"].indexOf(toDel) != -1){
x[i]["linksTo"].splice(x[i]["linksTo"].indexOf(toDel),1);
}
if(x[i]["id"] == toDel){index = i;}
}
if(index != -1){
x.splice(index, 1);
}

console.log(x);

关于javascript - 按 ID 删除对选定对象的对象引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28573303/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com