过滤重复的集合对象(区分insenstive和修剪),用下划线属性值(Filter duplicat

2019-10-19 16:18发布

我正在寻找一种方式来过滤/根据选择的属性值集合中拒绝的对象。 具体来说,我需要过滤掉包含该选择属性重复值对象。 我需要的属性值转换为小写和修剪的空白。

我已经有我的去除重复的方法,但我无法弄清楚如何将小写转换和修剪。

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

      return uniques;
    }

任何帮助,将不胜感激。

Answer 1:

如果集合的定义如下

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从单个对象属性并将其转换为小写字母。 所以,这下套管的名字将代表该对象和如果两个小写的名字是一样的,那么这些对象将被视为彼此的副本。



文章来源: Filter duplicate collection objects (case-insenstive and trim) by property value with underscore