我正在编写d3 force graph
以使更新看起来像我Modifying a Force Layout示例中实现的那样。但是在示例中取消显示我想要动态更新行为。鉴于我已经调用initializeGraphData(json);
一次的情况,我的nodes
- 数组包含一组node
个对象。在第二次调用时,我将每个json.nodes
对象推送到nodes
- 数组。然后我得到nodes
- 数组和json.nodes
- 数组之间的差异。对于每个不同的对象,我想通过提供索引和参数nodes
将其从1
数组中删除,以仅删除一个元素。
function initializeGraphData(json){
json.nodes.forEach(function(node){
nodes.push(node);
});
json.links.forEach(function(link){
links.push(link);
});
var difInNodes = nodes.diff(json.nodes);
difInNodes.forEach(function(node){
nodes.slice(nodes.indexOf(node), 1);
});
var difInLinks = links.diff(json.links);
difInLinks.forEach(function(link){
links.slice(links.indexOf(link), 1);
});
nodes.forEach(function(node){
java.alert("In nodes array: " + node.name);
});
draw();
checkForLinked(json);
checkForOptions(json);
}
一个节点元素可能如下所示
{"img":"ron.png","concept":null,"name":"Ron Weasley","id":1,"shortname":"Ron","properties":[{"property":"Animal","value":"Rat"}],"group":"#867b69"}
我确实知道当我尝试删除它们时这些不是同一个对象,所以我认为我可以使用node.id
属性,这也不起作用。
var difInNodes = nodes.diff(json.nodes);
difInNodes.forEach(function(node){
nodes.slice(node.id, 1);
});
如何删除数组中与内容等效的对象1:1中的对象?
答案 0 :(得分:1)
slice
不会从数组中删除条目,它会创建一个 new 数组,其中包含原始条目的子集。
鉴于您在何处以及如何使用它,我相信您打算使用splice
(使用public void ControllerName(int[] doorid)
{
foreach(var item in doorid)
//do something
}
)。
但是你也使用p
,就好像它是条目的索引一样,这可能不正确(当你第一次更改数组时肯定不正确)。首先,您需要找到正确的索引,然后使用node.id
删除条目。 ES2015将findIndex
添加到splice
,这对于根据回调函数查找条目的索引很有用;它可以在ES5和早期的发动机上进行垫片/聚合填充。
所以:
Array.prototype
或者,您可以使用var difInNodes = nodes.diff(json.nodes);
difInNodes.forEach(function(node){
var index = nodes.findIndex(function(entry) { return entry.id == node.id; });
if (index !== -1) {
nodes.splice(node.id, 1);
// ^
}
});
每次只使用您想要的条目构建新数组:
Array#filter
您使用的是由您自己决定的,主要取决于其他对数组的引用(因为第二种方法会创建 new 数组)。
答案 1 :(得分:-1)
您可以使用:{row[0]} is the ID of table product.
您只需要知道对象的索引。只需循环遍历数组并检查要剪切的对象的索引。
类似的东西:
array.splice(index,length);