如果满足两个条件,则从Json对象中删除节点

时间:2015-07-22 10:05:39

标签: jquery json

我有以下Json对象 -

"links": [  
      {  
         "source":"1",
         "target":"2"
      },
      {  
         "source":"3",
         "target":"4"
      },
      {  
         "source":"5",
         "target":"6"
      },
      {  
         "source":"1",
         "target":"2"
      }
   ]

如果链接已存在,如何删除链接,例如在前面提到的Json -

  {  
     "source":"1",
     "target":"2"
  }

存在两次,因此在此实例中删除副本,其中源和目标完全匹配另一个链接。

我试过了 -

var temp = [];

$.each(data.links, function (index, value) {
    if ($.inArray(value, temp) === -1) {
        temp.push(value);
    }
});

但是temp最终会获得与之前相同数量的链接?

2 个答案:

答案 0 :(得分:1)

尝试我的简单方法:

var links = [  
      {  
         "source":"1",
         "target":"2"
      },
      {  
         "source":"3",
         "target":"4"
      },
      {  
         "source":"5",
         "target":"6"
      },
      {  
         "source":"1",
         "target":"2"
      }
   ];
var temp = [];
$.each(links, function (index, value) {
    if (!temp[value.source + value.target]) {
        temp[value.source + value.target] = value;      
    }
});
console.log(temp);

答案 1 :(得分:0)

inArray不比较属性,在这种情况下,它可能会检查引用对象是否相同

您有两种比较方式,您可以比较对象的JSON.stringify版本。或者您可以按属性进行比较。我将在两种情况下提供示例。

stringify示例:

_.uniq(links, JSON.stringify)

使用lodash / underscore

比较属性的例子

_.each(links, function(link) {
    if (!_.any(temp, function(a) { return a.source == link.source && a.target == link.target; })) {
       temp.push(link);
    }
});