filter(), includes()
filter()
[3, 2, 0, 1] --> [3]
Возвращает отфильтрованный массив.
const a = [
{ id: 3, name: 'Не указан' },
{ id: 2, name: 'Тестовый статус' },
{ id: 0, name: 'Старый тестовый статус' },
{ id: 1, name: 'Что то происходит' },
];
// фильтрация по совпадению
const b = a.filter((el, index, thisArray) => el.id === 3); // [{ 3 }]
// фильтрация по несовпадению
const с = a.filter((el, index, thisArray) => el.id !== 3); // [{ 0, 1, 2 }]
// example
const deleteDeckFromSelected = (id: number) => {
setSelectedDecks(selectedDecks.filter((deck) => deck.id !== id));
};
Возвращает отфильтрованный массив, фильтру нужно условие если оно вернет true, то элемент проходит, если false, то нет.
Сравнение массивов
Есть два однотипных массива объектов, первый - полный исходный, второй часть от первого. Задача: нужно получить третий массив, который является разницей общего и второго.
const fullArray = [{...}, {...}, {...},{...},{...},{...}, ];
const partOfFullArray = [{...}, {...}, {...},];
const anotherPartOfFullArray = fullArray - partOfFullArray; /// ???
// делаем фильтрацию полного массива
const anotherPartOfFullArray = fullArray.filter((itemOfFull, index) => {
// на каждую итерацию проверяем есть ли этот элемент в полном массиве, если есть то вернется этот объект, если нет, то undefined
const matchedElement = partOfFullArray.find(itemOfPart => itemOfPart.id === itemOfFull.id);
// совпаденный объект - будет false, а undefined превратиться в true
return !Boolean(matchedElement);
});
includes()
Как some() с более лаконичной записью, только простых массивов с однотипными данными.
const playerId = 'id2';
const players = ['id1', 'id2', 'id3', ...];
const isPlayerExist = players.includes(playerId); // true