JavaScript删除数组中的等效对象

时间:2016-02-10 10:38:55

标签: javascript arrays json d3.js

我正在编写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中的对象?

2 个答案:

答案 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);