Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么';这个代码不适用于字谜检查吗?_Javascript_Arrays_Sorting_Split_Anagram - Fatal编程技术网

Javascript 为什么';这个代码不适用于字谜检查吗?

Javascript 为什么';这个代码不适用于字谜检查吗?,javascript,arrays,sorting,split,anagram,Javascript,Arrays,Sorting,Split,Anagram,我正在尝试在javascript中检查一个字谜。为简单起见,假设下面的函数只接受小写字符串,没有任何空格/数字/符号。为什么下面的代码不起作用 var anagram = function(string1, string2) { var string1array = string1.split('').sort(); var string2array = string2.split('').sort(); if (string1array == string2array)

我正在尝试在javascript中检查一个字谜。为简单起见,假设下面的函数只接受小写字符串,没有任何空格/数字/符号。为什么下面的代码不起作用

var anagram = function(string1, string2) {
    var string1array = string1.split('').sort();
    var string2array = string2.split('').sort();
    if (string1array == string2array) {
        console.log("they're anagrams");
    }
    else {
        console.log("they are not anagrams");
    }
}

不能像Javascript中那样直接比较数组元素

这里有多个实现可以做到这一点:

在您的情况下,只需使用
.join()
来比较两个字符串:

var anagram = function(string1, string2) {
    var string1_sorted = string1.split('').sort().join('');
    var string2_sorted = string2.split('').sort().join('');
    if (string1_sorted == string2_sorted) {
        console.log("they're anagrams");
    }
    else {
        console.log("they are not anagrams");
    }
}

=
不适用于
数组
,因为
数组
是一个
对象
=
操作符检查
对象是否相同:

var foo={};
var bar={};
console.log(foo==bar);//假的
var foo2={};
var bar2=foo2;
console.log(foo2==bar2);//正确
我正在尝试在javascript中检查一个字谜

这不完全是对这个问题的回答,而是对这个问题的一种不同的解决方法;在我的第一次测试中,速度要快得多(33-50%)。
_Pouet先生和Andrew Templeton先生已经给了你这个确切问题的答案

function anagram(a, b, caseSensitive){
    if(a.length !== b.length) return false;
    var c = caseSensitive? a: a.toLowerCase(), 
        d = caseSensitive? b: b.toLowerCase(),
        map = new Array(128),
        cc;

    for(var i = a.length; i--; ){
        cc = c.charCodeAt(i);
        map[cc] = (map[cc] || 0) + 1;

        cc = d.charCodeAt(i);
        map[cc] = (map[cc] || 0) - 1;
    }

    var i = map.length;
    if(i < 256){
        //faster for ANSI-like text
        while(i--) 
            if(i in map && map[i]) return false;
    }else{
        //faster for a huge sparse map, 
        //like UTF8 multibytes (Asian characters for example)
        for(var k in map)
            if(map[k]) return false;
    }
    return true;
}
函数字谜(a、b、区分大小写){
如果(a.length!==b.length)返回false;
var c=区分大小写?a:a.toLowerCase(),
d=区分大小写?b:b.toLowerCase(),
map=新阵列(128),
复写的副本;
for(var i=a.length;i--;){
cc=c.charCodeAt(i);
map[cc]=(map[cc]| 0)+1;
cc=d.charCodeAt(i);
map[cc]=(map[cc]| 0)-1;
}
var i=映射长度;
如果(i<256){
//对于类似ANSI的文本,速度更快
而(我--)
如果(映射中的i&&map[i])返回false;
}否则{
//对于大型稀疏贴图,速度更快,
//类似UTF8多字节(例如亚洲字符)
for(映射中的变量k)
if(map[k])返回false;
}
返回true;
}

谢谢。没有意识到数组是无法比较的。