Open sisterAn opened 4 years ago
str.indexOf(searchValue [, fromIndex])
searchValue
:要被查找的字符串值,默认 undefined
fromIndex
: 可选值。数字表示开始查找的位置。可以是任意整数,默认值为 0。如果 fromIndex
的值小于 0,或者大于 str.length ,那么查找分别从 0 和str.length 开始。
参考出处:indexOf()
function indexOf(str, a, start = 0) {
if(start<0) start+=str.length;
if(start>=str.length) return -1;
const reg = new RegExp(`${a}`, 'gi')
reg.lastIndex = start
const result = reg.exec(str)
return result ? result.index : -1
}
function indexOf(str, a, start = 0) {
if(start<0) start+=str.length;
if(start>=str.length) return -1;
for (let i = start, len = str.length; i < len; i++) {
if (str.slice(i, i+a.length) == a) return i;
}
return -1;
}
str.indexOf(searchValue [, fromIndex])
searchValue
:要被查找的字符串值,默认undefined
fromIndex
: 可选值。数字表示开始查找的位置。可以是任意整数,默认值为 0。如果fromIndex
的值小于 0,或者大于 str.length ,那么查找分别从 0 和str.length 开始。参考出处:indexOf()
解法一,正则
function indexOf(str, a, start = 0) { if(start<0) start+=str.length; if(start>=str.length) return -1; const reg = new RegExp(`${a}`, 'gi') reg.lastIndex = start const result = reg.exec(str) return result ? result.index : -1 }
解法二,遍历
function indexOf(str, a, start = 0) { if(start<0) start+=str.length; if(start>=str.length) return -1; for (let i = start, len = str.length; i < len; i++) { if (str[i] == a) return i; } return -1; }
遍历的时候不应该是 if (str[i] == a) return i;
,如果a是字符串的话就不对了,应该是 if (str.slice(i, i+a.length) == a) return i;
str.indexOf(searchValue [, fromIndex])
searchValue
:要被查找的字符串值,默认undefined
fromIndex
: 可选值。数字表示开始查找的位置。可以是任意整数,默认值为 0。如果fromIndex
的值小于 0,或者大于 str.length ,那么查找分别从 0 和str.length 开始。 参考出处:indexOf()解法一,正则
function indexOf(str, a, start = 0) { if(start<0) start+=str.length; if(start>=str.length) return -1; const reg = new RegExp(`${a}`, 'gi') reg.lastIndex = start const result = reg.exec(str) return result ? result.index : -1 }
解法二,遍历
function indexOf(str, a, start = 0) { if(start<0) start+=str.length; if(start>=str.length) return -1; for (let i = start, len = str.length; i < len; i++) { if (str[i] == a) return i; } return -1; }
遍历的时候不应该是
if (str[i] == a) return i;
,如果a是字符串的话就不对了,应该是if (str.slice(i, i+a.length) == a) return i;
@597796340 如果 a
是字符串的话就不对了。这个 a
是字符串为什么不对,方便解释一下吗
日复一日默写代码 function indexOf(str, a, start = 0) { if (start < 0) { start += str.length; } if (start >= str.length) return -1; for (let i = start, len = str.length; i < len; i++) { if (str[i] === a) { return i; } } return -1; }
str.indexOf(searchValue [, fromIndex])
searchValue
:要被查找的字符串值,默认undefined
fromIndex
: 可选值。数字表示开始查找的位置。可以是任意整数,默认值为 0。如果fromIndex
的值小于 0,或者大于 str.length ,那么查找分别从 0 和str.length 开始。 参考出处:indexOf()解法一,正则
function indexOf(str, a, start = 0) { if(start<0) start+=str.length; if(start>=str.length) return -1; const reg = new RegExp(`${a}`, 'gi') reg.lastIndex = start const result = reg.exec(str) return result ? result.index : -1 }
解法二,遍历
function indexOf(str, a, start = 0) { if(start<0) start+=str.length; if(start>=str.length) return -1; for (let i = start, len = str.length; i < len; i++) { if (str[i] == a) return i; } return -1; }
遍历的时候不应该是
if (str[i] == a) return i;
,如果a是字符串的话就不对了,应该是if (str.slice(i, i+a.length) == a) return i;
@597796340 如果
a
是字符串的话就不对了。这个a
是字符串为什么不对,方便解释一下吗
说错了,应该是说如果a是单字符的话就不对,indexOf('abcd', 'cd')
indexOf('abcd', 'cd')
@597796340 哈哈哈哈明白了。应该是 a
是多字符的时候。多谢指出哈,已经修改啦
let str = 'hello world ,I am ok';
/**
* 正则方法实现
* @param {*} searchStr
* @param {*} start
* @returns
*/
String.prototype.myindexOf=function(searchStr, start=0){
if (start < 0) start += this.length
if (start >= this.length) return -1
const reg = new RegExp(`${searchStr}`, 'ig')
reg.lastIndex = start//确定匹配起始位置
let res = reg.exec(this)
return res ? res.index : -1
}
console.log(str.myindexOf('world',7))
/**
* 2. 遍历字符串
*/
String.prototype._indexOf = function(searchStr,start=0) {
if(start<0) start+=this.length
if(start>this.length-1) return -1
for(let i=start;i<this.length;i++) {
if(this.slice(i,i+searchStr.length)===searchStr) return i
}
return -1
}
console.log(str._indexOf('I'))
正则方法随便写两个就是错的,不要误人子弟
sIndexOf('sss\^asdsad', '^')
0
'sss\^asdsad'.indexOf('^')
3
sIndexOf('sss$asdsad', '$')
10
'sss$asdsad'.indexOf('$')
3
sIndexOf('sss[$asdsad', '[')
Uncaught SyntaxError: Invalid regular expression: /[/: Unterminated character class
'sss[$asdsad'.indexOf('[')
3
indexOf
有两种:返回从
fromIndex
处开始搜索第一次出现的指定值的索引,如果未找到,返回-1
返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回
-1
解答
String.prototype.indexOf()
解题思路:正则,字符串匹配
测试成功
Array.prototype.indexOf()
解题思路:遍历匹配
测试成功
总结一下
你也可以尝试使用遍历匹配法解决
sIndexOf
问题(正则更简洁),这里不做介绍(和aIndexOf
差不多的套路,不同的是,String
类型可以一次匹配多个字符)