Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我无法将for循环转换为forEach循环_Javascript - Fatal编程技术网

Javascript 我无法将for循环转换为forEach循环

Javascript 我无法将for循环转换为forEach循环,javascript,Javascript,我是编程新手,我想将以下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]

我是编程新手,我想将以下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
    }
}
但是,我最终得到了以下错误:

letters.foreach不是一个函数


有人能帮忙吗?

字母
是jQuery对象,不是数组;要在jQuery对象上循环,必须使用jQuery方法,如
each

letters.each((i, letter) => {
  // do something with `letter`
Array.prototype.forEach.call(
  letters,
  letter => {
    // do something with `letter`
  }
);
checkLetter(letterToFind) {
  var letters = $('.letter');
  let foundLetter = false;
  letters.each((i, letterElement) => {
    if ($(letterElement).text() === letterToFind) {
      foundLetter = true;
    }
  });
  return foundLetter;
}
或者调用
Array.prototype.forEach

letters.each((i, letter) => {
  // do something with `letter`
Array.prototype.forEach.call(
  letters,
  letter => {
    // do something with `letter`
  }
);
checkLetter(letterToFind) {
  var letters = $('.letter');
  let foundLetter = false;
  letters.each((i, letterElement) => {
    if ($(letterElement).text() === letterToFind) {
      foundLetter = true;
    }
  });
  return foundLetter;
}
还要注意,当前的
letters.forEach(letter)
没有意义-
forEach
接受回调函数作为参数

但是,对于您试图实现的目标,更适合使用
Array.prototype。一些
检查
字母中的项目是否满足条件:
forEach
更适合于通用迭代,当其他数组方法不满足时:

checkLetter(letterToFind) {
  var letters = $('.letter');
  return Array.prototype.some.call(
    letters,
    letterElement => letterElement.textContent === letterToFind
  );
}
或者,使用jQuery的
each
,IMO不太合适,但仍然可以工作:

letters.each((i, letter) => {
  // do something with `letter`
Array.prototype.forEach.call(
  letters,
  letter => {
    // do something with `letter`
  }
);
checkLetter(letterToFind) {
  var letters = $('.letter');
  let foundLetter = false;
  letters.each((i, letterElement) => {
    if ($(letterElement).text() === letterToFind) {
      foundLetter = true;
    }
  });
  return foundLetter;
}

基于
forEach()
的方法不适合您的问题,因为它会使您在
forEach()
循环期间“提前返回”变得困难

也许您可以考虑使用<代码>()<代码>,如果迭代中的项满足给定条件:

,则返回true。
return node.innerHTML === letter
使用
some()
,您可以通过以下方式实现
checkLetter()
功能:

函数校验字母(字母){
//查询.letter节点的文档。这避免了jQuery的需要
var letters=document.queryselectoral('.letter');
//通过Array.from和将字母选择结果转换为数组
//然后调用some()确定是否至少有一个节点满足
//匹配条件“node.innerHTML==字母”
返回数组.from(字母).some(函数(节点){
return node.innerHTML==字母
})
}
log('Check A:',checkLetter('A'))
console.log('Check B:',checkLetter('B'))
console.log('Check Z:',checkLetter('Z'))
A
B
C
D
您可以使用Jquery。功能

$( ".letter" ).each(function( index ) {
if(letter === $( this ).html()) {
        console.log('this is true')
        return false; // this will stop the execution
       } 
});

既然已经给出了所有的循环答案,我将提出一种不同的方法。我建议您将所有匹配的节点
.letter
转换为一个字符串,并使用它来确定是否存在匹配。例:

函数校验字母(字母){
返回$('.letter').text().indexOf(letter)>-1;
}
console.log('A',checkLetter('A'));
console.log('C',checkLetter('C'));
console.log('F',checkLetter('F'))

A.
B
C
D

E
forEach是一种数组方法。我假设字母是一个字符串。forEach循环的大括号丢失这将不会产生正确的结果-
$。each()
方法不会返回迭代回调的结果-请参阅上面的答案,以获取基于
$的正确解决方案。each()
method:-)@DacreDenny我知道这是用于数组迭代和jQuery对象迭代的。但这里的字母实际上是一个Dom元素列表,而不是数组。不是吗?在OP中,如果在迭代过程中找到匹配项,则函数需要返回true。在
$中重新调整为true。每个
都无法实现此目的。很抱歉,在我的手机上键入的内容很难详细说明,但请重新阅读jQuery文档中有关传递给
$的处理程序函数返回行为的内容。每个
都希望有帮助:),但我认为这一部分没有问题。如果(letter==$(this.html()){console.log('this is true'),console.log将打印所需的输出。他可以使用return=false停止。请看我已经编辑了答案。我想现在毫无疑问:)。我已经在本地PC上测试了这一点。请查看
checkLetter()的返回行为
在OP中-注意函数本身是如何根据找到的匹配返回
true
false
的。函数不仅仅是记录日志和提前退出for循环,还包括在找到匹配时返回true,否则返回false。感谢所有帮助我的人,我能够找到解决方案!!