在foreach循环期间,jquery从数组中删除元素

时间:2011-12-14 12:29:15

标签: jquery for-loop foreach

我想在数组中查找一个项目,如果我找到它,那么我想删除它然后突破循环。这就是我所拥有的,但它只会跳回到第二个$ .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名称?感谢

3 个答案:

答案 0 :(得分:3)

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

return false;

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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));

结果“汤姆,杰里”