【问题标题】:Does JQuery or JavaScript have a next statement/function to skip to the next iteration of a loop?JQuery 或 JavaScript 是否有下一个语句/函数可以跳到循环的下一次迭代?
【发布时间】:2011-09-10 23:47:52
【问题描述】:

我有这段代码,我希望next 跳到下一次迭代。

$.each(result, function(key, value) {

    if (value.type == "individuel") {
    cform["IN"] = "checked";
    } else if (value.type == "course") {
    cform["CO"] = "checked";
    } else {

    next;

    }

    cform["ID"]     = key;
    cform["title"]  = value.title;

    $('#template').tmpl(cform).appendTo('#content');
});

next 显然与我的预期不同。

我觉得next 退出$.each 而不是跳过当前键/值。

有没有办法像我期望的那样做next

【问题讨论】:

  • next 不是 Javascript 中的关键字或保留字,因此除非在某处将其定义为变量,否则将 next 放入您的代码中应该会抛出 ReferenceError

标签: javascript jquery loops next


【解决方案1】:

由于 jQuery 的特性,无法在函数体中声明“下一个”。内部函数知道它是在循环中执行的,因此不会影响这一事实。

但是你可以早点回来,效果是一样的:

$.each(result, function(key, value) {
  if (value.type == "individuel") {
    cform["IN"] = "checked";
  } else if (value.type == "course") {
    cform["CO"] = "checked";
  } else {
    return true;
  } 

  cform["ID"]     = key;
  cform["title"]  = value.title;
  $('#template').tmpl(cform).appendTo('#content');
});

我觉得这更时尚:

$.each(result, function(key, value) {
  switch (value.type) {
    case "individuel": cform["IN"] = "checked"; break;
    case "course":     cform["CO"] = "checked"; break; 
    default: return true;
  }

  cform["ID"]     = key;
  cform["title"]  = value.title;
  $('#template').tmpl(cform).appendTo('#content');
});

【讨论】:

  • 请注意return false 会破坏整个循环并将其短路。
【解决方案2】:

for..inwhile 等其他构造不同,$.each 不是语言构造。使用这些结构,您可以使用continue 跳过当前元素,使用break 退出循环。由于$.each带有回调函数,所以需要使用回调的return值来影响接下来发生的事情。

返回true继续下一项;返回false 以打破循环。

在这种情况下,你应该使用return true:

else {
   return true; // skip to next element
}

【讨论】:

    【解决方案3】:

    返回真;

    来自文档:

    我们可以在 a 处打破 $.each() 循环 通过使特定的迭代 回调函数返回假。 返回非 false 与 a 相同 for 循环中的 continue 语句;它 将立即跳到下一个 迭代。

    jQuery.each

    【讨论】:

      【解决方案4】:

      使用 if 语句使下一个变得不必要。只需在 if 中做任何你想做的事,然后忽略 else。迭代会自动进行。

      【讨论】:

      • 那我不会有两次相同的代码吗? IE。最后 3 行代码将在每个 if-statement 中。这是一个简化的例子。还有大约 20 行代码。
      • 您必须配置 if 语句以满足您的目的。什么情况下需要运行这20行代码?然后设置该条件并运行它们,然后分解为更具体的情况。
      【解决方案5】:

      使用continue; 跳到循环中的下一个迭代。

      编辑:是的,对不起,我发誓我在那里看到了一个循环:(你可以通过返回一个非 false 值在 jQuery 的 each() 中“继续”,返回对你的情况有用吗?

      【讨论】:

      • 我编辑了我的答案.. @Raynos,这是否意味着我不能在 while 中使用 continue :)
      猜你喜欢
      • 2014-01-07
      • 2015-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多