首页 > 解决方案 > 我无法将 for 循环转换为 forEach 循环

问题描述

我是编程新手,我想将以下 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
}

但是,我最终收到以下错误:

letter.foreach 不是函数

有人可以帮忙吗?

标签: javascript

解决方案


letters是一个 jQuery 对象,而不是一个数组;要遍历 jQuery 对象,您要么必须使用 jQuery 方法,例如each

letters.each((i, letter) => {
  // do something with `letter`

或致电Array.prototype.forEach

Array.prototype.forEach.call(
  letters,
  letter => {
    // do something with `letter`
  }
);

另请注意,您的 currentletters.forEach(letter)没有意义 -forEach接受回调函数作为参数。

但是,对于您要实现的目标,当其他数组方法不能满足要求时,更适合用于Array.prototype.some检查项目是否letters满足条件:forEach更适合泛型迭代:

checkLetter(letterToFind) {
  var letters = $('.letter');
  return Array.prototype.some.call(
    letters,
    letterElement => letterElement.textContent === letterToFind
  );
}

或者,不太合适的 IMO 但仍然可以使用 jQuery 的each

checkLetter(letterToFind) {
  var letters = $('.letter');
  let foundLetter = false;
  letters.each((i, letterElement) => {
    if ($(letterElement).text() === letterToFind) {
      foundLetter = true;
    }
  });
  return foundLetter;
}

推荐阅读