按带有下划线的属性值过滤重复的集合对象(不区分大小写和修剪)
Filter duplicate collection objects (case-insenstive and trim) by property value with underscore
我正在寻找一种基于所选属性的值来过滤/拒绝集合中的对象的方法。具体来说,我需要过滤掉所选属性中包含重复值的对象。我需要将属性值转换为小写并修剪空白。
我已经有了删除重复项的方法,但我不知道如何包括小写转换和修剪。
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
属性并将它们转换为小写字母。所以,这个小写的名字将代表这个对象,如果两个小写的名字是相同的,那么这些对象将被认为是彼此的副本。
相关文章:
- 微风得到的是实体而不是对象的集合
- 类型错误'未定义'不是对象(正在评估'navigator.connection.type'
- 保存id数组's而不是对象
- 返回 JavaScript 类值而不是对象引用
- TypeError:undefined不是对象(正在评估'newWindow.focus')
- 为什么Angularjs服务返回的是字符数组而不是对象数组
- 对象不支持对象IE 8
- global.getElementById('..')为null或不是对象
- Javascript 方法看不到对象变量
- IE8错误:为null或不是对象,但仍然可以跟踪/控制台注销
- AngularJS错误:请求的键的值不是对象.keys@[本地代码]
- ui.selectmenu投掷'this.newelement.0'为null或不是对象
- 这在 Object 方法中不引用对象,而是引用函数绑定到的标记
- UI-Select2 绑定到对象而不是对象的属性
- j查询选择器不选择对象
- 表示不将对象从服务发送到 API 控制器
- 类型错误:'null'不是对象(正在评估'响应.productType')
- Karma+PhantomJS TypeError:undefined不是对象(正在评估scope.jjackpot)
- Node.appendChild的参数1不是对象
- html5拖动&drop-TypeError:Node.appendChild的参数1不是对象