如何查看一串单词以查看它们是否是一个单词的字谜

时间:2014-09-18 00:58:31

标签: javascript arrays javascript-objects

我试图找出一个有助于解决此测试的javascript函数。我需要能够确定给出的单词串(var匹配)是否是我正在运行的单词(var subject)的字谜。在这种情况下,不会有匹配。任何和所有的帮助将不胜感激。提前谢谢!

var anagram = require('./anagram');

describe('Anagram', function() {

    it("no matches",function() {
        var subject = anagram("diaper");
        var matches = subject.matches([ "hello", "world", "zombies", "pants"]);

        expect(matches).toEqual([]);
    });
});

这是我到目前为止所做的:

for (var i = 0; i < matches.length; i++) {
    if (subject.length != matches[i].length) {
        return false
    } else if (subject.length == matches[i].length){
    var anagram = function(subject, matches) {
        return subject.split("").sort("").join("") === matches[i].split("").sort("").join("");
    };
}

2 个答案:

答案 0 :(得分:0)

在此处找到并且有效:https://gist.github.com/AlbertoElias/10005056

function areAnagrams(a, b) {
    var c = false;
    if (a.length !== b.length) {
        return c;
    }

    var hashMap = {};
    var char;
    var i;
    for (i=0;i<a.length;i++) {
        char = a[i];
        hashMap[char] = hashMap[char] !== undefined ? hashMap[char]+1 : 1;
    }

    for (i=0;i<b.length;i++) {
        char = b[i];
        if (hashMap[char] !== undefined) {
            if (hashMap[char] > 1) {
                hashMap[char]--;
            } else {
                delete hashMap[char];
            }
        } else {
            return c;
        }
    }

    if (Object.keys(hashMap).length === 0) c = true;

    return c;
}

答案 1 :(得分:0)

这是小提琴:

http://jsfiddle.net/hn8r4v3u/2/

我在一个函数中按字母顺序对字母内的字母进行了按字母顺序排列。

function getAlphaSortedWord(word) {
    var baseWordCharArray = word.split("");
    baseWordCharArray.sort();
    return baseWordCharArray.join("");
}

代码有一个设置:

var baseWord = getAlphaSortedWord("bob");
var thingsToCheck = ["obb", "2", "bob", "", "bo", "ob"];

然后以两种方式解决它,一次使用过滤器,一次没有过滤器。

var matches = _.filter(thingsToCheck, function (str) {
    return (baseWord === getAlphaSortedWord(str));
});


var matches2 = [];
for (index = 0; index < thingsToCheck.length; index++) {
    if (baseWord === getAlphaSortedWord(thingsToCheck[index])) {
        matches2.push(thingsToCheck[index]);
    }
}

您应该能够使用它们来配合您的实际数据,以便通过测试。

注意,如果这将是生产代码,我会为我的函数添加一些“is string”的理智。