【问题标题】:look up if the characters in a string match the characters in a string array查找字符串中的字符是否与字符串数组中的字符匹配
【发布时间】:2021-04-25 21:59:32
【问题描述】:

我正在尝试实现这样的目标:

const word = "abracadabra" 让 usedCharacter = ["a", "b", "c", "d", "r"]

如果单词由可用的 usedCharacter 组成,则返回 true

让 usedCharacter = ["a", "b", "c", "d", "r", "z"] 也应该返回 true

让 usedCharacter = ["b", "c", "d", "r", "z"] 应该返回false

我应该使用 for 循环遍历 word 并将每个 word(i) 与使用的字符进行比较还是有更简单的方法?

感谢您的意见!

【问题讨论】:

  • 是的,您需要检查每个字符是否包含在数组中。一个简单的循环很好,如​​果找不到字符,您可以提前退出。您还可以将字符串展开到数组中并使用every()[...word].every(char => usedCharacter.includes(char))

标签: javascript arrays string


【解决方案1】:

你可以这样做:

const word = "abracadabra";
let usedCharacter = ["a", "b", "c", "d", "r"];

let res = word.split('').filter(function(char) {
    return !usedCharacter.includes(char);
});
if(res.length == 0) {
     return true;
} else {
     return false;
}

这样你就可以知道哪些字符丢失了

祝你好运

【讨论】:

  • 非常感谢,这有助于我更好地理解!
【解决方案2】:

您可以使用splitting 与每个字符一起使用单词轻松实现此目的,并检查usedCharacter 中是否存在每个字符。

const word = "abracadabra";
const usedCharacter = ["a", "b", "c", "d", "r"];

function hasAllUsedCharacters(word, used) {
  return word.split("").every((c) => usedCharacter.includes(c));
}

const result = hasAllUsedCharacters(word, usedCharacter);
console.log(result);

使用Set的替代解决方案

const word = "abracadabra";
const usedCharacter = ["a", "b", "c", "d", "r"];

function hasAllUsedCharacters(word, used) {
  const set = new Set(usedCharacter);
  const initialLength = set.size;
  word.split("").forEach((w) => set.add(w));

  return set.size === initialLength;
}

const result = hasAllUsedCharacters(word, usedCharacter);
console.log(result);

【讨论】:

  • 谢谢你,这行得通!但是我还不明白的是(c)的使用
  • cwordArraysplitting. 之后的单个字符
  • 您对set.add(...word) 的使用不是将单词的所有字符都添加,而只是添加了第一个字符。您需要遍历单词并分别添加每个字符。
  • @pilchard not adding all the characters 是什么意思?
  • Set.add() 只接受一个值,所以如果你在传播时传递多个值,除了第一个之外的所有值都会被忽略
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-14
  • 1970-01-01
  • 1970-01-01
  • 2013-05-16
  • 1970-01-01
  • 2017-04-08
  • 1970-01-01
相关资源
最近更新 更多