这是一个简单的一行代码,时间复杂度为O(N)
,不需要复杂的循环。
> Object.keys(['a', 'b', 'a'].reduce((l, r) => l[r] = l, {})).sort()
[ 'a', 'b' ]
解释
原始数据集,假设其来自外部函数
const data = ['a', 'b', 'a']
我们希望以去重的方法将所有值分组为键,并使用对象作为默认值进行reduce操作:
[].reduce(fn, {})
下一步是创建一个reduce函数,将数组中的值放入对象中。最终结果是一个具有唯一键集合的对象。
const reduced = data.reduce((l, r) => l[r] = l, {})
我们设置
l[r] = l
是因为在JavaScript中,当赋值语句用作表达式时,赋值表达式的值将被返回。
l
是累加器对象,
r
是键值。如果您需要每个值的计数,则还可以使用
Object.assign(l,{[r]:(l [r] || 0)+1})
或类似方法来获取每个值的计数。
接下来,我们想要获取该对象的键。
const keys = Object.keys(reduced)
然后只需使用内置排序功能。
console.log(keys.sort())
原始数组的唯一值集合,按照排序顺序。
['a', 'b']
a*1 - b*1
而不是直接做a - b
? - NullUserException