去重这个词,在我们程序员的日常中还是很常见的,字符串、数组、对象、嵌套形式的去重,各种去重应用场景,最近有空整理整理各种数据的去重方法,这里整理的都是按照常规的数据,特殊的先不考虑,主要是看处理方法和思路。
一、字符串去重
1.indexOf 方法
const str = 'asdfasd'
const ChangeStr = (data) => {
let newstr = ''
for(i in data){
if(i==data.indexOf(data[i])){
//for循环遍历,判断当前值是否等于当前下标
//indexOf方法返回第一个查找元素下标
//注意:for循环的 i 类型都是string,所以不要用严格等于判断
newstr += data[i]
}
}
return newstr
}
//if()里的条件判断,判断data和newstr都可以
console.log(ChangeStr(str))
// "asdf"
2.search 方法
const str = 'asdfasd'
const ChangeStr = (data) => {
let newstr = ''
for(i in data){
if(i==data.search(data[i])){
//indexOf与search方法一样,获取元素下标,没有返回-1
newstr += data[i]
}
}
return newstr
}
//if()里的条件判断,判断data和newstr都可以
console.log(ChangeStr(str))
// "asdf"
3.includes 方法
const str = 'asdfasd'
const ChangeStr = (data) => {
let newstr = ''
for(i in data){
if(!newstr.includes(data[i])){
//es6的新语法,过程是严格判断
newstr += data[i]
}
}
return newstr
}
console.log(ChangeStr(str),'ChangeStr')
// "asdf"
4.Set 方法
const str = 'asdfasd'
const ChangeStr = ( data ) => [... new Set(data)].join('')
//用es6的Set去重,转成数组,再转字符串
console.log( ChangeStr( str ), 'ChangeStr' )
// "asdf"
这里双重for循环就不讲了,循环用少用,耗性能。
二、数组去重 string | number [ ]
1.indexOf 方法
const data = [ 1, 2,