【发布时间】:2021-02-17 11:21:16
【问题描述】:
由于某种原因,这个 for 循环永远不会完成。它达到 3(从它迭代的数组的长度为 -2),然后又回到 0,我不知道为什么。
const dictionary = ['hack', 'a' , 'rank' , 'khac','ackh']
const query = ['a','nark','bs','hack','stair']
console.log(stringAnagram(dictionary, query))
function stringAnagram(dictionary, query){
let sortedDictionary=[];
let sortedQuery = [];
let alphabetisedWord;
let sortedWord;
let anagramsCount = [];
// sort them
for(let i = 0; i<dictionary.length-1; i++){
sortedWord= dictionary[i];
if(dictionary[i].length > 1){
sortedWord= sortedWord.split('');
console.log('sortedWord: ',sortedWord)
sortedWord= sortedWord.sort();
console.log('sortedWord: ',sortedWord)
sortedWord= sortedWord.join('');
console.log('sortedWord: ',sortedWord)
sortedDictionary[i] = sortedWord;
} else {
sortedDictionary[i] = sortedWord;
}
console.log(i, dictionary.length)
}
for(let i = 0; i<query.length-1; i++){
alphabetisedWord = query[i];
if(query[i].length > 1){
alphabetisedWord = alphabetisedWord.split('');
console.log('alpha : ', alphabetisedWord)
alphabetisedWord = alphabetisedWord.sort();
alphabetisedWord = alphabetisedWord.join('');
}
var regex = new RegExp("/" + alphabetisedWord + "/", "g");
console.log(stringAnagram(dictionary, query))
anagramsCount[i] = sortedDictionary.toString().match(regex).length
sortedQuery[i] = alphabetisedWord;
}
return anagramsCount;
}
谁能说出这是什么原因?我已经尝试记录所有索引和单词,但我之前用类似的回答方法做了一个类似的问题 - 只是这一次出现了无限循环,我以前从未见过这种情况。
【问题讨论】:
-
当您使用
RegExp构造函数构造正则表达式字符串时,您不会将/添加到它。如果这样做,则意味着您要按字面意思匹配“/”字符。 -
另外,
console.log(stringAnagram(dictionary, query))是对函数的递归调用,这实际上是一个无限循环。 -
{ "message": "Uncaught TypeError: Cannot read property 'length' of null", "filename": "https://stacksnippets.net/js", "lineno": 54, "colno": 68 }修复上面的两个 cmets 时 - 行是anagramsCount[i] = sortedDictionary.toString().match(regex).length- 还有为什么-1在i<query.length-1中? -
呵呵...有趣..然后去潜水
-
从内部无条件调用
stringAnagram()stringAnagram()是一个无限递归序列。
标签: javascript