如何在Javascript中从迭代器内部返回一个值

时间:2011-01-26 22:50:43

标签: javascript jquery

我有一个我想要返回true或false的函数。

在函数内部,我遍历页面上的一些元素并检查它们的值。

但是如果我在迭代器中放入一个return语句,它会从匿名函数返回吗? (而不是外部功能)。

function someElementHasZeroValue() {
  $('.some-class').each(function(){
    if($(this).html() == '0'){
      return true;
    }
  });
  return false;
}

因此无论如何,此函数始终返回false。

最好的方法是什么?下面的解决方案似乎有效,但看起来并不优雅。

function someElementHasZeroValue() {
  elements_found_with_zero_value = 0;
  $('.some-class').each(function(){
    if($(this).html() == '0'){
      elements_found_with_zero_value += 1;
    }
  });

  if(elements_found_with_zero_value > 0){
    return true;
  }else {
    return false;
  }
}

更一般地说,有没有人知道为什么Javascript要求你使用匿名函数迭代元素而不是像大多数语言那样的普通迭代器,或者有什么方法可以做到这一点我不知道?

4 个答案:

答案 0 :(得分:3)

你需要像你这样的解决方案,但它可能会更简单一些。

function someElementHasZeroValue() {
      // this is the return value, initialized as false
  var ret = false;
  $('.some-class').each(function(){
    if($(this).html() == '0'){
      ret =  true; // set it to true
    }
  });
  return ret;  // return the value of "ret"
}

此外,如果您想在.each()成功时中断if()循环,则可以添加return false;,这将在不返回函数的情况下中断循环。

    if($(this).html() == '0') {
      ret = true;  // set it to true
      return false; // break the each() loop
    }

答案 1 :(得分:2)

您正在使用jQuery,而不是纯Javascript。你可以做一个正常的循环:

function someElementHasZeroValue() {
    var selection = $('.some-class');
    for (var i = 0; i < selection.length; i++) {
        if ($(selection[i]).html() === '0') {
            return true;
        }
    }
    return false;
}

或者,您可以采用更类似jQuery的方式执行此操作:

function someElementHasZeroValue() {
    return $('.some-class').filter(function(){
        return $(this).html() === '0';
    }).length > 0;
}

答案 2 :(得分:1)

嗯,JavaScript并不需要你。这是jQuery正在做的事情。使用JavaScript,您可以正常执行循环并以此方式返回。 jQuery的each()将为您使用的选择器的所有匹配增量返回一个jQuery对象。你可以这样做:

function someElementHasZeroValue() {
  var returnValue = false;
  $('.some-class').each(function(){
    if($(this).html() == '0'){
      returnValue = true;
    }
  });
  return returnValue;
}

答案 3 :(得分:1)


function someElementHasZeroValue() {
  var result = false;

  $('.some-class').each(function() {
     if (($this).html() == '0') {
       result = true;
       return false;
     }
  });

  return result;
}

请注意return false内部each回调意味着我们应该中断迭代(请参阅jQuery文档),它类似于“正常周期”中的break

也总是更喜欢用var进行变量声明(使用局部变量而不是全局变量)。