字符串去重是我们平常面试中经常遇到的问题,今天来详细的解释一下通过使用indexOf来实现字符串去重,然后再详细的解释一下为什么这样写,接下来上代码咯:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>数组去重</title>
</head>
<body>
<script>
var str = 'asdffgwqqwssaxcvfghhdqwsda'
function quchong(str) {
var newStr = "";
for(var i = 0,len=str.length;i<len;i++) {
if(newStr.indexOf(str[i]) == -1){
newStr += str[i]
}
}
return newStr
}
console.log(quchong(str))
</script>
</body>
</html>
首先要解释一下indexOf这个方法:可返回某个指定的字符串值在字符串中首次出现的位置。
语法:
stringObject.indexOf(searchvalue,fromindex)
参数 | 描述 |
---|---|
searchvalue | 必须值,规定需要检索的字符串值 |
fromindex | 可选的整数参数。规定在字符串中开始检索的位置。它的合法取值是 0 到 stringObject.length - 1。如省略该参数,则将从字符串的首字符开始检索。 |
具体参考:http://www.w3school.com.cn/jsref/jsref_indexOf.asp
举个栗子:
var str = 'asdffgwqqwssaxcvfghhdqwsda'
console.log(str.indexOf('a',1))
这句的意思是我从第一个索引去找到下一个a这个字符串,而下一个返回的字符串的位置是12,所以会返回12。
var str = 'asdffgwqqwssaxcvfghhdqwsda'
console.log(str.indexOf('a'))
如果我们只填这一个参数的话,那么就是搜索到这个a的索引就会停止,那么就是0了。
现在解释这个字符串去重也就是去解析下最?面的那代码:
var str = 'asdffgwqqwssaxcvfghhdqwsda'
function quchong(str) {
var newStr = ""; //1.首先我们要定义一个空的变量;
//2.循环我们的字符串,并使用indexOf方法,因为newStr是一个空的,所以当它使用indexOf方法的时候都是-1因为没有值与它对比,所以等于-1的值也都是唯一的值
for(var i = 0,len=str.length;i<len;i++) {
//我们将==-1的值写到newStr中就吧str中重复的值过滤掉了
if(newStr.indexOf(str[i]) == -1){
newStr += str[i]
}
}
return newStr
}