为什么可以't个数组与Javascript中的===进行比较

Why can't arrays be compared with === in Javascript?

本文关键字:中的 Javascript 比较 数组 为什么      更新时间:2023-09-26

为什么这段代码没有正确地将单词推送到答案数组?当我将循环更改为:时

    for (var k in testDict) {
        console.log(testDict[k].split("").sort());
    }

它正确地打印了我所期望的,一个从单词中分割、排序的字符数组。所以我不知道为什么它没有评估为平等并推动回答。谢谢

function word_unscrambler(word, dict) {
    var testDict = dict;
    var answer = [];
    var word_scrambled = word.split("").sort();
        for (var k in testDict) {
            if (word_scrambled === testDict[k].split("").sort())
                answer.push(testDict[k]);
        }
    console.log(answer);
}
word_unscrambler("kevin", ["trees", "but", "ankle", "nevik", "knive", "evin"]);

问题是,您正在测试数组是否相等,因为您使用的是字符串,所以您可以将两个正在比较的数组连接起来:

function word_unscrambler(word, dict) {
    var testDict = dict;
    var answer = [];
    var word_scrambled = word.split("").sort().join('');
        for (var k in testDict) {
            if (word_scrambled === testDict[k].split("").sort().join(''))
                answer.push(testDict[k]);
        }
    console.log(answer);
}

您不能使用==有关更多信息和问题的解决方案,请参阅本页:如何检查两个数组是否与JavaScript相等?

不能直接比较数组是否相等,因为它只会比较它们的指针。您必须比较数组的内容。只要你不处理多维数组,这就足够了:

function word_unscrambler(word, dict) {
    var testDict = dict;
    var answer = [];
    var word_scrambled = word.split("").sort();
        for (var k in testDict) {
            if (arrays_equal(word_scrambled, testDict[k].split("").sort()))
                answer.push(testDict[k]);
        }
    console.log(answer);
}
function arrays_equal(arr1, arr2) {
    for (var i in arr1) {
        if (arr1[i]!==arr2[i])
            return false;
    }
    return true;
}
word_unscrambler("kevin", ["trees", "but", "ankle", "nevik", "knive", "evin"]);