试图使_.uniq()在以下结构上工作:
[
{'x' : 1, 'y': 2},
{'x' : 1, 'y': 2},
{'x' : 2, 'y': 3},
{'x' : 2, 'y': 4},
{'x' : 3, 'y': 4}
]
结果应该是:
[
{'x' : 1, 'y': 2},
{'x' : 2, 'y': 3},
{'x' : 2, 'y': 4},
{'x' : 3, 'y': 4}
]
即删除重复项。我想避免字符串化,因为然后只需要将每个解析回一个JSON对象即可。
任何帮助,将不胜感激。
编辑:在下面寻找马特的解决方案,我错过了一些我认为的东西-这是行不通的。如果我记录a和b的值,我会看到
_.uniq($scope.validNotes, function (a, b) {
console.log(a, b);
return a.x === b.x && a.y === b.y;
});
Object {x: 2, y: 3} 0
Object {x: 1, y: 0} 1
Object {x: 2, y: 3} 2
Object {x: 3, y: 2} 3
Object {x: 4, y: 2} 4
Object {x: 5, y: 1} 5
显然这意味着我永远都找不到骗子
因为两个对象不是==
or ===
,仅仅因为它们具有相同的键,所以您将需要使用函数的[iterator]
参数uniq()
;
_.uniq(myArray, function (item) {
return item.x + item.y;
});
注意,您将需要返回唯一的字符串组合;考虑的情况下,{ x: 11, y: 1 }
和{ x: 1, y: 11 }
; 我的代码会将两者都解析为111
,并将它们视为相同。
就像是:
_.uniq(myArray, function (item) {
return 'x:' + item.x + 'y:' + item.y;
});
……将更具弹性,但这当然取决于您的数据值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句