[英]Javascript/jQuery check if string contains a word or occurrences of one of the optional words
[英]How can I check a string of words to see if they are an anagram of one word
我正在尝试找出一个可帮助解决此测试的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("");
};
}
在这里找到并且有效: 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;
}
这是小提琴:
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”的含义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.