我有以下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
最终会获得与之前相同数量的链接?
答案 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);
}
});