通过属性值使用下划线过滤重复的集合对象(不区分大小写和修剪)
问题描述:
我正在寻找一种方法来根据所选属性的值过滤/拒绝集合中的对象。具体而言,我需要筛选出包含所选属性的重复值的对象。我需要将属性值转换为小写,并修剪空白。通过属性值使用下划线过滤重复的集合对象(不区分大小写和修剪)
我已经有我的方法来删除重复,但我不知道如何包括小写转换和修剪。
removeDuplicates: function (coll, attr) {
var uniques = _.map(_.groupBy(coll, function (obj) {
return obj[attr];
}), function (grouped) {
return grouped[0];
});
return uniques;
}
任何帮助,将不胜感激。
答
如果集合这样定义
var array = [{
name: "thefourtheye"
}, {
name: "theFOURtheye"
}, {
name: "thethirdeye"
}];
您应该使用_.uniq
功能,这样
var attr = "name";
console.log(_.unique(array, false, function(currenObject) {
return currenObject[attr].toLowerCase();
}));
# [ { name: 'thefourtheye' }, { name: 'thethirdeye' } ]
按照签名,
uniq_.uniq(array, [isSorted], [iterator])
第二个参数是告诉集合是否已经排序。这很重要,因为如果集合被排序,那么有算法可以非常有效地找到唯一的数据。
第三个参数,应该是一个函数,它可以对数据进行变换以获得键值进行比较。正如我们在示例中看到的,我们实际上从各个对象中选取name
属性并将它们转换为小写字母。因此,这个较低的名称将代表这个对象,如果两个小写名称相同,那么这些对象将被视为彼此的副本。