0

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

    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"]);
4

3 回答 3

3

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

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);
}
于 2013-08-23T18:07:12.060 回答
1

您无法使用 == 比较数组,请参阅此页面以获取更多信息和问题的解决方案:如何使用 JavaScript 检查两个数组是否相等?

于 2013-08-23T18:05:32.833 回答
0

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

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"]);
于 2013-08-23T18:19:15.313 回答