在我的CouchDB reduce函数中,我需要将一个条目列表缩减为唯一的条目。
注意:在这种情况下,可以有一个列表,它将是一小部分字符串类型的项目。
我目前的方法是设置一个对象的键,然后返回该对象的键,因为代码不能使用像_.uniq
这样的东西。
我想找到一种比这个更优雅的拼写方式。
function(keys, values, rereduce) {
// values is a Array of Arrays
values = Array.concat.apply(null, values);
var uniq = {};
values.forEach(function(item) { uniq[item] = true; });
return Object.keys(uniq);
}
发布于 2018-09-29 15:36:47
最好的方法似乎是使用ES6和Set。根据fiddle的说法,单行速度*比上面更快
const myList = [1,4,5,1,2,4,5,6,7];
const unique = [...new Set(myList)];
console.log(unique);
*在safari中测试
发布于 2015-07-01 18:37:59
适用于小列表的另一种方法是模仿sort | uniq
的Unix命令行方法
function unique(a) {
return a.sort().filter(function(value, index, array) {
return (index === 0) || (value !== array[index-1]);
});
}
此函数对参数进行排序,然后筛选结果以忽略与其前身相等的所有项。
基于键的方法很好,对于大量的项( O(n )用于将n项插入到哈希表中,而O(N log n)用于对数组进行排序)将具有更好的性能特征。然而,这在小列表中不太可能被注意到。此外,在这个版本中,如果需要,您可以修改它以使用不同的排序或相等函数;使用散列键,您将坚持使用键相等的JavaScripts概念。
发布于 2018-08-13 04:08:21
这应该适用于任何东西,而不仅仅是字符串:
export const getUniqueList = (a: Array<any>) : Array<any> => {
const set = new Set<any>();
for(let v of a){
set.add(v);
}
return Array.from(set);
};
以上内容可以简化为:
export const getUniqueValues = (a: Array<any>) => {
return Array.from(new Set(a));
};
:)
https://stackoverflow.com/questions/11688692
复制相似问题