【发布时间】:2014-12-06 00:52:04
【问题描述】:
我有一个包含重复对象的数组,我正在尝试获取一个唯一列表,其中唯一性由对象属性的子集定义。例如,
{a:"1",b:"1",c:"2"}
我想在唯一性比较中忽略c。
我可以做类似的事情
_.uniq(myArray,function(element) { return element.a + "_" + element+b});
我希望我能做到
_.uniq(myArray,function(element) { return {a:element.a, b:element.b} });
但这不起作用。有没有我可以做的事情,或者如果我要比较多个属性,我是否需要创建对象的可比较表示?
【问题讨论】:
-
你为什么要尝试第二次?第一个有效,对吧?
-
是的,第一个是有效的,但是必须进行字符串连接感觉有点笨拙。试图了解是否有更自然的方法来做到这一点。
-
对象始终是唯一的,因此您需要按单个属性值进行比较,而不是按整个对象进行比较。使用字符串比较可以处理某些数据,但不能处理其他数据,例如:使用如图所示的数字字符串,您有可能将 {a:"1"} 与 {a:1}.s 冲突
-
_.uniq([{a:"1",b:"1",c:"2"},{a:"1",b:"2",c:"2 "},{a:"1",b:"1",c:"2"}], JSON.stringify); JSON 顺序无法保证,但我不明白为什么这在单个浏览器中不起作用。
-
在我的特殊情况下,我只是比较字符串。 @dandavis 我不想比较所有属性,只比较其中的一个子集
标签: javascript underscore.js unique lodash