Быстрое начало работы с методами массива filter, indexOf и lastIndexOf

В этом посте мы рассмотрим, как удалить значения из массива примитивов. Это означает удаление, например, значений из массивов чисел или массивов строк.
Числа, строки, логические значения, null или undefined являются примитивами.
Удаление значения
Простой способ удалить значение из массива — использовать метод filter.
Метод filter создает новый массив со всеми элементами, прошедшими проверку, выполненную функцией предиката.
Предикат — это функция, которая принимает элемент и возвращает логическое значение (true или false). Мы можем просто написать предикатную функцию, используя стрелочную функцию.
Ниже приведен пример удаления значения null из массива. Метод filter создает новый массив с удаленным значением null. Исходный массив не изменяется.
const arr = [1, 2, 3, null]; const newArr = arr.filter(x => x !== null); console.log(newArr); //[1, 2, 3]
Обратите внимание, что текущая логика удаляет все вхождения значения из массива. В следующем примере удаляются оба значения null.
const arr = [1, 2, 3, null, null, 4]; const newArr = arr.filter(x => x !== null); console.log(newArr); //[1, 2, 3, 4]
Создание многократно используемой функции
Мы можем инкапсулировать предыдущую логику, чтобы мы могли повторно использовать ее в разных местах.
function removeValue(arr, value){
return arr.filter(function(item) {
return item !== value;
});
}
Ниже показана предыдущая функция, используемая для удаления значения 2 из массива чисел.
const arr = [1, 2, 3, 4, 2]; const newArr = removeValue(arr, 2); console.log(newArr) //[1, 3, 4]
Затем та же функция используется для удаления текста 'B' из массива строк.
const arr = ['A', 'B', 'C']; const newArr = removeValue(arr, 'B'); console.log(newArr) //["A", "C"]
Удаление первого и последнего вхождения значения
Как уже было сказано, предыдущая логика удаляет все вхождения значения. Что, если мы хотим удалить только первое значение, а не все?
Метод indexOf возвращает первый индекс определенного значения. Если значение не найдено, возвращается -1.
Функция обратного вызова для метода фильтра принимает второй аргумент, задающий индекс текущего значения. Мы можем использовать этот индекс для обнаружения только первого вхождения.
Ниже приведена логика удаления только первого вхождения значения.
function removeFirstValue(arr, value) {
const index = arr.indexOf(value);
return arr.filter((x, idx) => idx !== index);
}
const arr = [1, 2, 3, 4, 2];
const newArr = removeFirstValue(arr, 2)
console.log(newArr);
// [1, 3, 4, 2]
Метод lastIndexOf возвращает первый индекс определенного значения. Если значение не найдено, возвращается -1.
Аналогичным образом мы можем использовать метод lastIndexOf вместе с методом filter для удаления только последнего вхождения значения.
function removeLastValue(arr, value) {
const index = arr.lastIndexOf(value);
return arr.filter((x, idx) => idx !== index);
}
const arr = [1, 2, 3, 4, 2];
const newArr = removeLastValue(arr, 2)
console.log(newArr);
// [1, 2, 3, 4]
Это все, что нам нужно сделать. Спасибо за чтение.
