通过属性值使用下划线过滤重复的集合对象(不区分大小写和修剪)

问题描述:

我正在寻找一种方法来根据所选属性的值过滤/拒绝集合中的对象。具体而言,我需要筛选出包含所选属性的重复值的对象。我需要将属性值转换为小写,并修剪空白。通过属性值使用下划线过滤重复的集合对象(不区分大小写和修剪)

我已经有我的方法来删除重复,但我不知道如何包括小写转换和修剪。

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属性并将它们转换为小写字母。因此,这个较低的名称将代表这个对象,如果两个小写名称相同,那么这些对象将被视为彼此的副本。