我试图自学javascript。我选择的东西我认为很简单,但相对较快地遇到了问题。
我试图在字符串中搜索用户提供的另一个字符串。
到目前为止我的代码是:
var source = "XREs2qqAQfjr6NZs6H5wkZdOES5mikexRkOPsj6grQiYNZfFoqXI4Nnc1iONKVrA";
var searchString = []; //the users input
searchString = prompt("Enter search string");
var hits = [];
var one = 0;
var two = 0;
var k = 0;
var sourceSearch = function(text) {
for(i = 0; i < source.length; i++) { //for each character in the source
if(source[i] === searchString[0]) { //if a character in source matches the first element in the users input
one = source.indexOf(i); //confused from here on
for(p = searchString.length; p > 0; p--) {
}
}
}
};
sourceSearch(searchString);
我的想法是:
我的问题:我不知道如何在没有嵌套相当多if语句的情况下迭代数组,即便如此,考虑到我希望程序能够处理任何输入,这还不够。
任何想法都会有所帮助。首先十分感谢。
注意:我正在测试的想法中有一些未使用的变量,但我无法使它们发挥作用。
答案 0 :(得分:1)
您可以尝试:
if (source.indexOf(searchString) !== -1) {
// Match!
}
else
{
//No Match!
}
答案 1 :(得分:0)
按照你的方法,你可以玩2个索引:
var sourceSearch = function(text) {
j = 0;
for(i = 0; i < source.length; i++) {
if(source[i] === text[j]) {
j++;
} else {
j = 0;
}
if (j == text.length) {
console.log(i - j); //this prints the starting index of the matching substring
}
}
};
答案 2 :(得分:0)
正如其他答案到目前为止所指出的那样,JavaScript字符串具有indexOf
功能,可以满足您的需求。如果你想看看它是如何“手动”完成的,你可以修改你的功能:
var sourceSearch = function(text) {
var i, j, ok; // always declare your local variables. globals are evil!
// for each start position
for(i = 0; i < source.length; i++) {
ok = true;
// check for a match
for (j = searchString.length - 1; ok && j >= 0; --j) {
ok = source[i + j] === searchString[j];
}
if (ok) {
// searchString found starting at index i in source
}
}
};
此功能会找到source
中找到searchString
的所有位置。 (当然,你可以在第一次成功时突破循环。)逻辑是使用外部循环前进到source
中的每个候选起始位置并使用内部循环来测试该位置是否实际是匹配到searchString
的位置。
这不是搜索字符串的最佳算法。内置算法要快得多(因为它是一个更好的算法,因为它是本机代码)。
答案 3 :(得分:0)
这些答案都很不错,但我可能会选择这样的东西:
var source = "XREs2qqAQfjr6NZs6H5wkZdOES5mikexRkOPsj6grQiYNZfFoqXI4Nnc1iONKVrA";
var searchString = []; //the users input
searchString = prompt("Enter search string");
var hits = source.split(searchString);
var hitsCount = hits.length - 1;
通过这种方式,您可以获得所需的所有数据,以确定每次点击在源中发生的位置,如果这对您很重要。