我试图在 js 中运行这个函数,这个函数应该检查字符串是否有任何重复的字母,如果有则返回 false,如果没有则返回 true 但它不返回任何内容。我正在尝试比较两个字符串并根据它返回 true 或 false。
function isIsogram(str) {
let str1 = str.toLowerCase().split("");
//console.log(str.toLowerCase())
let str2 = []
for (let i = 0; i < str1.length; i++) {
//console.log(str1[i])
if (str2.indexOf(str1[i]) === -1) {
str2.push(str1[i])
}
}
//console.log(str2)
if (str2 === str1) {
return true;
} else return false;
}
console.log(isIsogram("abba"))
答案 0 :(得分:1)
您可以尝试使用以下方法:
function hasRepeatedChar(text){
return text.split("").some(
function(v,i,a){
return a.lastIndexOf(v)!=i
}
);
}
这个答案很好地解释了它: Check for repeated characters in a string Javascript
答案 1 :(得分:0)
我认为你可以像这样优化你的算法:
function isIsogram(str) {
let foundChars = [];
for (let i = 0; i < str.length; i++) {
const char = str[i];
if (foundChars.includes(char)) {
return false;
}
foundChars.push(char);
}
return true;
}
console.log(isIsogram("ab"));
console.log(isIsogram("abba"));
答案 2 :(得分:0)
One 不是简单地比较两个数组。但是你可以先把它们连接成字符串,然后比较。
function isIsogram(str) {
let str1 = str.toLowerCase().split("");
let str2 = []
for (let i = 0; i < str1.length; i++) {
if (str2.indexOf(str1[i]) === -1) {
str2.push(str1[i])
}
}
if (str2.join('') === str1.join('')) {
return true;
} else return false;
}
console.log(isIsogram("abba"))
此外,我为您提供了一个更简单的解决方案,即利用 Set
。
function isIsogram(str) {
return new Set(str.split('')).size === str.length
}
console.log(isIsogram("abba"), isIsogram("abc"))
答案 3 :(得分:0)
您正在尝试使用 str2 === str1
比较两个包含字符的数组。不幸的是,严格相等运算符 ===
旨在比较原始类型,如字符串或数字而非数组。
在您的代码中,最快的解决方案是使用 join 方法将 str1
和 str2
都转换为字符串,然后像 str2.join('') === str1.join('')
一样比较它们。
阅读有关 javascript here 中的相等性检查和连接方法 here
的更多信息附言- 这不是最好/最优的方法,但足够简单,可以开始。
答案 4 :(得分:0)
我认为这有效:
function isIsogram(str) {
let str1 = str.toLowerCase().split("");
let str2 = [];
for (let i = 0; i < str1.length; i++) {
if (str2.indexOf(str1[i]) === -1) {
str2.push(str1[i]);
}
else{
return false;
}
}
return true;
}
console.log(isIsogram("abba"));