到目前为止。我有这个:
function anagrams(word, words) {
for(let i = 0; i <= words.length; i++){
const aCharMap = buildCharMap(word);
const bCharMap = buildCharMap(words[i]);
if(Object.keys(aCharMap).length !== Object.keys(bCharMap).length) {
words.pop(words[i])
}
for (let char in aCharMap) {
if (aCharMap[char] !== bCharMap[char]) {
words.pop(words[i]);
}
}
console.log(word);
console.log(words);
}
}
function buildCharMap(str) {
const charMap = {};
for (let char of str.replace(/[^\w]/g, '').toLowerCase()) {
charMap[char] = charMap[char] + 1 || 1;
}
return charMap;
}
如果您阅读了代码,那么眼前的问题就显而易见了,但是这里是
编写一个可以从列表中查找单词的所有字谜的函数。您将获得两个输入一个单词和一个带有单词的数组。您应该返回所有字谜的数组;如果没有,则返回一个空数组。例如:
anagrams('abba', ['aabb', 'abcd', 'bbaa', 'dada']) => ['aabb', 'bbaa']
anagrams('racer', ['crazer', 'carer', 'racar', 'caers', 'racer']) => ['carer', 'racer']
anagrams('laser', ['lazing', 'lazy', 'lacer']) => []
pop
是什么?
尝试一下
function anagrams(word, words) {
let result = [];
for(let i = 0; i < words.length; i++){
const aCharMap = buildCharMap(word);
const bCharMap = buildCharMap(words[i]);
let test = () => {
if(Object.keys(aCharMap).length !== Object.keys(bCharMap).length) return false;
for (let char in aCharMap) {
if (aCharMap[char] !== bCharMap[char]) {
return false
}
}
return true;
}
if(test(aCharMap,bCharMap)) result.push(words[i])
}
function buildCharMap(str) {
const charMap = {};
for (let char of str.replace(/[^\w]/g, '').toLowerCase()) {
charMap[char] = charMap[char] + 1 || 1;
}
return charMap;
}
return result
}
console.log(anagrams("test",["estt","ttee","tset"]))