如果所有字母都出现在字符串中,则返回 true

Returning true if all letters appear in string?

本文关键字:字符串 true 返回 如果      更新时间:2023-09-26
function match (string,pattern){
  pattern = pattern.toLowerCase();
  string = string.toLowerCase ();
  for (var i=0;i<pattern.length;i++){
    for (var j=0;j<string.length;j++){
      if (pattern.charAt[i]==string.charAt[j]){
      }
      *if i has not been found, abort and return false*
    }
  *as function not aborted, char i=found therefore return true*
  } 

}

如果模式的所有单个字母都出现在字符串中(无论顺序如何(,我需要返回 true。 如何对最后两行进行编码**?

function match (input,pattern){
  pattern = pattern.toLowerCase();
  input= input.toLowerCase ();
  for (var i=0;i<input.length;i++){
    var found = false;
    for (var j=0;j<pattern.length;j++){
      if (pattern.charAt(j)==input.charAt(i)){
        // Letter was found, skip to next one
        found = true;
        break;
      }
    }
    // As soon as we conclude that one letter was not found, abort
    if (found == false){
        return false;
    }
  }
  // All letters were found, return SUCCESS
  return true; 
}

像这样的东西?

如果你使用 Array.every 会更好。它更短,你的意图很明显。

function match (str, pattern) {
    str = str.toLowerCase();
    return pattern.toLowerCase().split("").every(function(c) {
        return str.indexOf(c) !== -1;
    });
}

这个应该比将for循环嵌套在另一个循环中更好地扩展:

function everyChar(sample,pattern){
  var patTable=Object.create(null);
  var aSample=Array.prototype.slice.call(sample.toLowerCase());
  var aPattern=Array.prototype.slice.call(pattern.toLowerCase());
  aPattern.forEach(function(c){patTable[c]=true;});
  aSample.forEach(function(c){delete patTable[c];});
  return Object.keys(patTable).length==0;
}
var sample_pass="pack my box with five dozen liquor jugs";
var pat="the quick brown fox jumped over the lazy dogs";
everyChar(sample_pass,pat);
/*
true
*/
var sample_fail="pack my bag with five dozen liquor jugs";
everyChar(sample_fail,pat);
/*
false
*/