检查字符串是否包含其他字符串

时间:2018-03-18 21:00:31

标签: javascript arrays string for-loop

我想检查数组中的字符串1是否包含字符串2中单词的字母。这是我的示例数组:

(["Floor", "far"]);

函数应返回false,因为“a”不在字符串“Floor”中 但对于像这样的数组:

(["Newbie", "web"]);

它应该返回true,因为“web”中的所有字母都在“Newbie”中。

到目前为止,这是我的代码......

function mutation(arr) {
    var newArr = [];
    for (i=0; i<arr.length; i++) {
        newArr.push(arr[i].toLowerCase().split(""));
    }
    for (i=0; i<newArr.length; i++) {
        for (j=0; j<newArr[i].length; j++) {
            console.log(newArr[0][j]+ (newArr[1][j]));
    }
  }
}
mutation(["Newbie", "web"]);

我知道它不起作用,我不知道如何制作它。我尝试在两个数组中创建一组所有字母并进行比较。如果至少有一个 false ,则该函数应返回false。我应该在某处嵌套 indexOf()方法吗?

3 个答案:

答案 0 :(得分:4)

我认为这对你有用。分解字符串以检查数组。迭代数组获取每个字母并检查传入的字符串是否包含字母,如果不存在则将结果设置为false。

function mutation(arr) {
  var charArr = arr[1].toLowerCase().split("");
  var result = true;
  charArr.forEach(element => {
    if (!arr[0].toLowerCase().includes(element)) {
      result = false;
    }
  });
  return result;
}
console.log(mutation(["Newbie", "web"]));

答案 1 :(得分:1)

很酷的方式是:

 const mutation =([one, two]) => (set => [...two.toLowerCase()].every(char =>  set.has(char)))(new Set(one.toLowerCase()));

工作原理:

首先,我们将传递的数组解构为第一个和第二个词:

 [one, two]

现在我们同时获得了两个,我们从第一个单词构建了一组字符:

 (set => /*...*/)(new Set(one))

在IIFE中的所有原因我们需要这里的设置:

 [...two].every(char => set.has(char))

将第二个单词扩展到数组中,因此我们得到一个字符数组,然后检查所有字符是否都是我们从另一个单词构建的集合的一部分。

答案 2 :(得分:1)

如果您想确保一个单词(可能包含多个重复字母)包含在另一个单词中,请使用Array.reduce()计算字母数,然后存储创建一个map字母 - &gt;计数。这两个词都做到了。使用entries检查第一个字地图中是否包含第二个字的所有Array.every()

&#13;
&#13;
const countLetters = (w) => 
  w.toLowerCase()
  .split('')
  .reduce((r, l) => r.set(l, (r.get(l) || 0) + 1), new Map());

const mutation = ([a, b]) => {
  const al = countLetters(a);
  const bl = countLetters(b);
  
  return [...bl].every(([k, v]) => v <= (al.get(k) || 0));
};

console.log(mutation(["Floor", "far"])); // false

console.log(mutation(["Floor", "for"])); // true

console.log(mutation(["Floor", "foroo"])); // false

console.log(mutation(["Newbie", "web"])); // true
&#13;
&#13;
&#13;