Для полноты я подумал, что может иметь смысл показать измененный вариант массива.
Ниже приведен фрагмент с простой функцией mutationFilter
, он будет фильтровать массив напрямую, обратите внимание, что в этой функции цикл идет в обратном порядке, это метод удаления элементов с измененным массивом.
Также пара тестов, чтобы показать, как Array.filter
создает новый массив, а mutationFilter
- нет.
Хотя в большинстве случаев создание нового массива с Array.filter
- это обычно то, что вам нужно. Одним из преимуществ использования мутированного массива является то, что вы можете передавать массив по ссылке, без необходимости заключать массив в другой объект. Конечно, еще одним преимуществом является память, если бы ваш массив был огромным, встроенная фильтрация заняла бы меньше памяти.
let arr = ['a','b','a'];
let ref = arr; //keep reference of original arr
function mutationFilter(arr, cb) {
for (let l = arr.length - 1; l >= 0; l -= 1) {
if (!cb(arr[l])) arr.splice(l, 1);
}
}
const cond = x => x !== 'a';
const filtered = arr.filter(cond);
mutationFilter(arr, cond);
console.log(`ref === array -> ${ref === arr}`);
console.log(arr);
console.log(`ref === filtered -> ${ref === filtered}`);
console.log(filtered);