javascript - 检查字符串是否包含子字符串而不使用indexOf - Javascript

标签 javascript arrays

我的函数正在尝试检查字符串是否包含子字符串,而不使用indexOf或正则表达式match或任何标准JS方法。

请检查这个jsfiddle:https://jsfiddle.net/09x4Lpj2/

var string1 = 'applegate';
    var string2 = 'gate';

    function containsString(string1, string2){
	  var j = 0;
      var k = 0;
      var contains = 'false';
      var charArray1 = string1.split('');
      var charArray2 = string2.split('');
  
      for(var i = 0; i < charArray2.length; i++){
  	    j = i;
        if(charArray1[j++] != charArray2[k++]){
    	  contains = 'false';
        }else{
    	  contains = 'true';
        }   
      }
  
     console.log(contains);
    }
containsString(string1, string2);

仅当两个字符串之间的索引相同时(例如 applegateapple),此解决方案才有效。但如果索引不同(例如 applegategate),则不起作用。如何正确操作迭代值,以便函数在这两种情况下都返回 true?

最佳答案

你可以尝试一下你的这个修改过的脚本。

var string1 = 'applegate';
var string2 = 'gate';
var string3 = 'apple';
var string4 = 'leg';
var string5 = 'banana';

function containsString(string1, string2){
  var charArray1 = string1.split('');
  var charArray2 = string2.split('');
  var match = 0;

  // iterate from start of 1st string until length of 1st string minus length of 2nd string
  // you don't need to iterate the last part that is not longer than 2nd string since it will be false
  for(var i = 0; i < charArray1.length - charArray2.length + 1; i++){
    // reset match counter on every iteration
    match = 0;
    // iterate the 2nd string
    for(var j = 0; j < charArray2.length; j++){
      // compare corresponding char location
      if(charArray1[i+j] == charArray2[j]){
        match++;
        // just to check in console
        console.log(i, j, match, charArray1[i+j], charArray2[j]);
      } else {
        // just to check in console
        console.log(i, j, match, charArray1[i+j], charArray2[j]);
        // if not match, just skip current check
        break;
      }
      // if match already found, stop the checks, and return true
      if(match == charArray2.length){
        return true;
      }
    }
  }
  // match not found until end of iteration
  return false;
}

console.log(containsString(string1, string2));
console.log(containsString(string1, string3));
console.log(containsString(string1, string4));   
console.log(containsString(string1, string5));   // haystack does not contain needle
console.log(containsString(string4, string1));   // haystack is shorter than needle

关于javascript - 检查字符串是否包含子字符串而不使用indexOf - Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40076926/

相关文章:

javascript - 为 noUiSlider 构建动态 Javascript 对象

java - 从 javascript 到 java servlet 的 HTTP POST

Javascript:点击事件之前会触发什么事件?

javascript - 在 jQuery 中查找并淡出一个元素

php - 如果我的数组索引相同,如何使用 foreach 获取表数据

Javascript [jQuery] 按键和值过滤数组

c++ - size_t i < _str.length 在 C++ 中创建无限循环

javascript - Three.js 渲染普通几何体的白色部分

javascript - 如何使用 jQuery 获取指定索引处的表格单元格

PHP如何有条件地分配类属性变量