我试图比较两个字符串,看看它们是否是字谜.
我的问题是我只是比较每个字符串中的第一个字母.例如,"玛丽"和"军队"将返回真实,但遗憾的是"玛丽"和武器."
在返回true/false之前,如何比较两个字符串的每个字母?
这是一个jsbin演示(单击"控制台"选项卡查看结果"):
http://jsbin.com/hasofodi/1/edit
function compare (a, b) {
y = a.split("").sort();
z = b.split("").sort();
for (i=0; i<y.length; i++) {
if(y.length===z.length) {
if (y[i]===z[i]){
console.log(a + " and " + b + " are anagrams!");
break;
}
else {
console.log(a + " and " + b + " are not anagrams.");
break;
}
}
else {
console.log(a + " has a different amount of letters than " + b);
}
break;
}
}
compare("mary", "arms");
Run Code Online (Sandbox Code Playgroud)
Ori*_*iol 22
在排序之后,您可以join将数组再次转换为字符串,并让浏览器进行比较,而不是逐个字母地进行比较:
function compare (a, b) {
var y = a.split("").sort().join(""),
z = b.split("").sort().join("");
console.log(z === y
? a + " and " + b + " are anagrams!"
: a + " and " + b + " are not anagrams."
);
}
Run Code Online (Sandbox Code Playgroud)
如果您想编写一个函数而不使用内置函数,请检查以下解决方案。
function isAnagram(str1, str2) {
if(str1 === str2) {
return true;
}
let srt1Length = str1.length;
let srt2Length = str2.length;
if(srt1Length !== srt2Length) {
return false;
}
var counts = {};
for(let i = 0; i < srt1Length; i++) {
let index = str1.charCodeAt(i)-97;
counts[index] = (counts[index] || 0) + 1;
}
for(let j = 0; j < srt2Length; j++) {
let index = str2.charCodeAt(j)-97;
if (!counts[index]) {
return false;
}
counts[index]--;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)