绝妙的函数:字符串去重

Awesome Function: dedulpicate

在线演示

原始数据:’我我们都是勤勤劳的小蜜蜂蜂蜜我我们都是勤勤劳的…’

经过较大数据的测试,方法一和方法三的性能最好,不相上下,可见正则的威力还是很大的。
另外在正则方法的实现上,eval函数可谓是最大功臣,所以此函数并不是一无是处的。

方法一:利用ES6原生Set API

1
2
3
4
const deduplicate1 = string => {
let result = Array.from(new Set(string.split(''))).join('')
return result
}

方法二:逐一取出字符串首元素同时过滤相同元素

1
2
3
4
5
6
7
8
9
10
const deduplicate2 = string => {
let result = []
let arr = string.split('')
while (arr.length) {
let current = arr.shift()
result.push(current)
arr = arr.filter(item => item !== current)
}
return result.join('')
}

方法三:逐一取出字符串首元素同时过滤相同元素正则版

1
2
3
4
5
6
7
8
9
10
11
12
const deduplicate3 = string => {
let s = string
let result = []
let current = ''
while (s.length) {
current = s[0]
result.push(current)
s = s.slice(1)
s = s.replace(eval(`/${current}/g`), '')
}
return result.join('')
}