【问题标题】:jquery remove element from array during foreach loopjquery在foreach循环期间从数组中删除元素
【发布时间】:2012-01-20 05:27:00
【问题描述】:

我想在数组中查找一个项目,如果我找到它,我想删除它,然后跳出循环。这就是我所拥有的,但它只会跳回到第二个 $.each 的开头

var tempArray = dataArray;

$.each(users, function(i, val) {
    var name = val.name;
// loop over each obj and match
$.each(tempArray, function(k, kval) {
   if(name === kval.username){
        tempArray.splice(k, 1);
    return;
   }
    });
});         

我怎样才能跳回到第一个循环的开头,以便它开始迭代 nxt 名称?谢谢

【问题讨论】:

    标签: jquery for-loop foreach


    【解决方案1】:

    尝试在第二个循环中返回 false

    return false;
    

    【讨论】:

      【解决方案2】:

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

      http://api.jquery.com/jQuery.each/

      【讨论】:

      • 但是如果你不想中断循环,而只是从循环中删除 item[i],因为它满足一个条件,然后继续你的 .each 循环()。文档没有解决这个问题,我看到一些开发人员只是使用 return;在要从循环中删除 $(this) 的条件语句中。
      【解决方案3】:

      Grep 只会 grep 您想要的值并丢弃您不想要的值。

      var persons = peopleArray;
      $.each( users, function ( ii, user ) {
          persons = jQuery.grep( persons , function ( person ) {
              return ( person.userName !== user.name );
          } );
      } );
      

      或 javascript 数组 fn {map, filter}:

      var persons= [{name: "tom", age: 22 }, { name: "jerry", age: 23 }, { name: "XXX", age: 24 }]
      , bads = [{ name: "XXX", pets: 9 }, { name: "YYY", pets: 6 }];
      
      var badnames = bads.map(function(r){ return r.name });
      alert( persons.filter( function(r) {
          return badnames.indexOf( r.name ) !== 0
      } ).map( function ( r )    {
          return r.name
      } ) );
      

      EcmaScript 6 使用简写 (lambda '=>'),您可以

      var badnames = bads.map(r=>r.name );
      alert( persons.filter( r=> badnames.indexOf( r.name ) !== 0 ).map(r=>r.name));
      

      结果“汤姆,杰瑞”

      【讨论】:

        猜你喜欢
        • 2012-02-15
        • 2010-12-29
        • 2014-09-08
        • 1970-01-01
        • 1970-01-01
        • 2022-11-28
        • 2021-09-05
        • 2013-05-29
        相关资源
        最近更新 更多