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

时间:2014-03-27 12:02:44

标签: javascript underscore.js

我正在寻找一种基于所选属性的值过滤/拒绝集合中对象的方法。具体来说,我需要过滤掉包含所选属性的重复值的对象。我需要将属性值转换为小写并修剪空格。

我已经有了删除重复项的方法,但我无法弄清楚如何包含小写转换和修剪。

removeDuplicates: function (coll, attr) {
      var uniques = _.map(_.groupBy(coll, function (obj) {
        return obj[attr];
      }), function (grouped) {
        return grouped[0];
      });

      return uniques;
    }

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

如果集合定义如下

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