我是编程的新手,我想将以下for循环转换为foreach循环,这是for循环:
checkLetter(letter) {
//give the letter class a variable named letters to have a reference to them
var letters = $('.letter');
for (var i=0; i < letters.length; i++) {
console.log(letters[i].innerHTML);
//if the phrase contains a letter from the phrases array return true, otherwise it will return false
if(letter === letters[i].innerHTML) {
console.log('this is true')
return true
}
else return false
}
}
这就是我为forEach版本所写的内容:
checkLetter(letter) {
//give the letter class a variable named letters to have a reference to them
var letters = $('.letter');
//loop through each letter using Foreach
letters.forEach(letter)
console.log(letters[i].innerHTML);
//if the phrase contains a letter from the phrases array return true, otherwise it will return false
if(letter === letters[i].innerHTML) {
console.log('this is true')
return true
}
else return false
}
但是,我最终得到了 letters.foreach is not a function ,有人可以帮忙吗?
4 回答
基于
forEach()
的方法不适合您的问题,因为它会在forEach()
循环期间使"early returns"变得困难 .也许您可以考虑使用
some()
,如果迭代中的项满足提供的条件,则返回true:使用
some()
,您可以通过以下方式实现checkLetter()
功能:你可以使用Jquery . each功能 .
letters
是一个jQuery对象,而不是一个数组;要遍历一个jQuery对象,你要么必须使用jQuery方法,比如each
:或致电
Array.prototype.forEach
:另请注意,您当前的
letters.forEach(letter)
没有意义 -forEach
接受回调函数作为参数 .但是,对于你想要实现的目标,使用
Array.prototype.some
来检查letters
中的项是否满足条件更合适:forEach
更适合于泛型迭代,当其他数组方法不够时:或者,不太合适的IMO但仍然有效,使用jQuery的
each
:由于已经给出了所有循环答案,我将提出一种不同的方法 . 我建议您将所有匹配的节点
.letter
转换为字符串并使用indexOf来确定是否存在匹配 . 例如: