JQuery удалить элемент из массива во время цикла foreach - PullRequest
1 голос
/ 14 декабря 2011

Я хочу найти элемент в массиве, и если я найду его, я хочу удалить его, а затем вырваться из цикла.Это то, что у меня есть, но оно возвращается только к началу второго $ .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 ]

3 голосов
/ 14 декабря 2011

Попробуйте вернуть false во второй цикл

return false;
2 голосов
/ 14 декабря 2011

Мы можем разорвать цикл $ .each () на определенной итерации, сделав функцию обратного вызова return false. Возвращение non-false - это то же самое, что и оператор continue в цикле for; он сразу перейдет к следующей итерации.

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

1 голос
/ 28 апреля 2017

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 С сокращением (лямбда '=>') вы можете

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

результат "Том, Джерри"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...