以下是我在一个给定字符串中查找不同长度模式的练习。我怎样才能改善它?有什么问题?这只是一个优化问题。
function find(pattern,str) {
var arr = [];
for (i= 0;i<str.length;i++) {
if(pattern== str.slice(i,pattern.length+i)) {
arr.push([i,pattern.length-1+i]);
};
};
if(!arr.length) { return false;} else { return arr;};
};
find('abfd','abfdffdabfdfaffab');
答案 0 :(得分:1)
indexOf()方法返回搜索模式的位置,如果找不到模式,则返回-1:
<!DOCTYPE html>
<html>
<body>
<p>Click the button to locate where in the string a specifed value occurs.</p>
<button onclick="myFunction()">Try it</button>
<p id="demo"></p>
<script>
function find(pattern,str) {
var pos = str.indexOf(pattern);
return pos === -1 ? false : [pos, pos + pattern.length-1];
}
function myFunction() {
var pos = find('dabfd', 'abfdffdabfdfaffab');
document.getElementById("demo").innerHTML = 'found: ' + pos;
}
</script>
</body>
</html>
答案 1 :(得分:0)
首先,你正在做str.length *(slice + compare * pattern.length),如果你在字符串中有太多的错误,这实在是效率很低。
对此代码的一些改进可以是:
[(i, i+length)]
而不是返回var中[i]
的元组。 (因为调用者已经知道pattern.length)。