В настоящее время я использую $.grep для фильтрации и удаления элементов из массива, который я передаю. Я считаю, что $ .grep предназначался для фильтрации только, но поскольку он выполняет итерацию по всему массиву, я решил, что могу изменить массив внутри него.
Есть ли у вас какие-либо другие подходы, которые вы можете предложить? У меня была мысль о $.map, но AFAIK он должен использоваться для перевода элементов, а не для их удаления.
Является ли отдельный $.each
моей единственной альтернативой?
Соответствующая часть моего кода:
$.each(filter, function (k, v) {
if (v.codeKeys) {
$.each(v.codeKeys, function (i, codeKey) {
rows = $.grep(rows, function (v2, i2) {
if ($.isArray(v2[v.dbColumn]) &&
$.inArray(codeKey, v2[v.dbColumn]) === -1) {
var index = $.inArray(codeKey ,v2[v.dbColumn]);
if (v2[v.dbColumn][index])
v2[v.dbColumn].remove(index);
return true;
}
else {
return v2[v.dbColumn] !== codeKey;
}
});
});
}
});
ОК, поэтому я думаю, что это сводится к читаемости и производительности. '$ .map' создаст дополнительный цикл, улучшая читаемость. – Johan
@Johan: Имейте в виду, что это поведение не соответствует стандартному методу '.map'. Итераторы jQuery отклоняются от спецификационных эквивалентов различными способами. –
Спасибо за головы. Я бы сказал, что вещи, которые jQuery изменили на своих версиях стандартных методов массива, как правило, упрощают работу разработчиков. – Johan