如何找到所有string2字母是否也包含在string1中?

时间:2015-07-28 07:44:35

标签: javascript loops

我正在尝试比较两个字符串,以查看其中一个字符串的输入是否也在另一个字符串中,无论顺序如何。

到目前为止,我有以下代码......

我做错了什么?

var str1= "rkqodlw"
var str2= "world"

StringScrambler(str1, str2);

function StringScrambler(str1, str2) {
    var string1= str1.split("").sort();
        console.log(string1);
    var string2 = str2.split("").sort();
        console.log(string2);
    matches = [];
    for (i=0; i< string1.length; i++) {
        for (j=0; j<string2.length; i++) {
            while (j === i) {
              matches.push(j);
              console.log(matches);
              var matchSort = matches.sort();
              console.log(matchSort);
                if (matchSort === string2) {
                    return true;
                }else {
                    return false;
                }
            }
        }
    }
}

7 个答案:

答案 0 :(得分:1)

var one = "dlrow";
var two = "world";
var allCharsFound = true;
one.split("").map(function(char) {
    if (two.indexOf(char) < 0) {
        allCharsFound = false;
    }
});
console.log(allCharsFound);

答案 1 :(得分:1)

var str1= "rkqodlw";
var str2= "world";

function test($str1, $str2) {
  var string2 = str2.split("");
  for(var i=0; i<string2.length; i++) {
    if (str1.indexOf(string2[i]) == -1) {
      return false;
    }
  }
  return true;
}

答案 2 :(得分:1)

到目前为止所有的答案都可以正常工作,但它们不能用于第二个字符串中带双字母的单词但不能用于第一个字符串(例如'。worlld' - 注意双L)。诀窍是影响第一个单词,以便删除找到的字符,以便不再检查相同的字母。像这样的东西可以解决这个问题:

// Check if the second string's characters are
// found in the first string
function StringScrambler(str1, str2) {
  var arr1 = str1.split(''),
      arr2 = str2.split(''),
      isATrueSubset = true,
      indexOfChar;

  arr2.forEach(function(char) {
    indexOfChar = arr1.indexOf(char);
    if (indexOfChar > -1) {
      // Remove the character that was found
      // to avoid matching against it again
      arr1.splice(indexOfChar, 1);
    } else {
      isATrueSubset = false;
      // No need to continue
      return;
    }
  });

  console.log(isATrueSubset);
  return isATrueSubset;
}

StringScrambler('rkqodlw ', 'world '); // outputs true
StringScrambler('rkqodlw ', 'worlld '); // outputs false

答案 3 :(得分:0)

如果str2始终是str1的子集,则可以使用此答案

Compute intersection of two arrays in JavaScript

&#13;
&#13;
var arr1 = "rkqodlw".split("");
var arr2 = "world".split("");

var commonValues = arr2.filter(function(value) { 
  return arr1.indexOf(value) > -1; 
});

alert(commonValues.join(""))
&#13;
&#13;
&#13;

答案 4 :(得分:0)

您可以使用以下代码执行此任务:

alert (AllFirstInSecond("world", "rkqodlw"));
alert (AllFirstInSecond("worldz", "rkqodlw"));

function AllFirstInSecond(str1, str2) {
    var pos = str1.length - 1;
    while (pos >= 0) {
        if (str2.indexOf(str1.substr(pos--,1)) == -1) {
            return false;
        }
    }
    return true;
}

它只是检查第一个字符串中的每个字符,看它是否在第二个字符串中。如果没有,则返回false。

只有在找到所有内容后才会返回true。

有优化的可能性(每个角色都经过检查,即使它已经被复制了,但是,除非你的字符串特别大,否则可能没有多少绝对收益。

答案 5 :(得分:0)

这将比较第一个字符串中第二个字符串的每个单词,如果它存在,它将被添加到mathes数组中。

var str1= "rkqodlw";
var str2= "world2";

StringScrambler(str1, str2);

function StringScrambler(str1, str2) {

var string2 = str2.split("").sort();

console.log(string2);
matches = [];
for (j=0; j<string2.length; j++) {
    if(str1.indexOf(string2[j]) > -1){
         matches.push(string2[j]);
        console.log(string2[j]);    
    }
}
console.log(matches);

}

答案 6 :(得分:0)

试试这个:

var str1= "rkqodlw"
var str2= "world"

StringScrambler(str1, str2);

  function StringScrambler(str1, str2) {
  var string1 = str1.split("").sort();

  var string2 = str2.split("").sort();

  matches = [];
   for (i = 0; i < string1.length; i++) {
      if (string2.indexOf(string1[i]) > -1) matches.push(string1[i]);
   }
return matches
}