Javascript 字谜算法问题的替代解决方案

Javascript 字谜算法问题的替代解决方案,javascript,algorithm,counter,anagram,Javascript,Algorithm,Counter,Anagram,我将正在解决的练习题粘贴在下面的照片中。我有一个答案是正确的,但我试着把它调高,我不知道为什么另一个答案不起作用。如有任何解释,将不胜感激,谢谢 我的解决方案有效 var string1 = "somethingb" var string2 = "omesnigthr" function validAn(string1,string2) { let obj1 = {} let obj2 = {} if (string1.len

我将正在解决的练习题粘贴在下面的照片中。我有一个答案是正确的,但我试着把它调高,我不知道为什么另一个答案不起作用。如有任何解释,将不胜感激,谢谢

我的解决方案有效

var string1 = "somethingb"
var string2 = "omesnigthr"

function validAn(string1,string2)
{
    let obj1 = {}
    let obj2 = {}

    if (string1.length !== string2.length){
        return false
    }
    for(let char of string1){ 
        obj1[char]= (obj1[char] || 0) + 1
    }
    for(let char of string2){
        obj2[char]= (obj2[char] || 0) + 1
    }
    for(var val in obj1){
        if(!(val in obj2)){
            return false
        }
        if(obj2[val] !== obj1[val]){
            return false
        }
    }
 return true
}

我的解决方案不起作用

var string1 = "somethingb"
var string2 = "omesnigthr"

function validAn(string1,string2)
{
    let obj1 = {}
    let obj2 = {}

    if (string1.length !== string2.length){
        return false
    }
    for(let char of string1){ 
        obj1[char]= (obj1[char] || 0) + 1
    }
    for(let char of string2){
        obj2[char]= (obj2[char] || 0) + 1
    }
    for(var val in obj1){
        if(val in obj2) && (obj2[val] == obj1[val])){
            return true
        }
    }
return true
}


在第二个不起作用的解决方案中,总是返回true。在第三个for循环中,您应该检查两个对象的键是否具有相同的值,如果没有,则返回false:

var string1=“somethingb”
var string2=“omesnigthr”
功能validAn(string1、string2)
{
设obj1={}
设obj2={}
if(string1.length!==string2.length){
返回错误
}
对于(string1的let char){
obj1[char]=(obj1[char]| | 0)+1
}
for(设string2的char){
obj2[char]=(obj2[char]| | 0)+1
}
用于(obj1中的var val){
如果(!(obj2中的val)| |(obj2[val]!==obj1[val])){
返回错误
}
}
返回真值
}

console.log(validAn(string1,string2))
最后一个for循环中的
=
应该是
=
。最后一个if语句应该有一个
else返回false
。您是否尝试调试代码?手动跟踪一个简单的示例(例如
validAn(“a”、“b”)
),查看发生了什么以及为什么返回true。