Skip to main content

find(), some(), every()

find()

[3, 2, 0, 1] --> 3

Возвращает элемент массива. Метод для поиска элемента внутри массива. Возвращает первый найденный элемент. Возвращает из из массива то, что найдет.

const a = [
{ id: 3, name: 'Не указан' },
{ id: 2, name: 'Тестовый статус' },
{ id: 0, name: 'Старый тестовый статус' },
{ id: 1, name: 'Что то происходит' },
];

// поиск по совпадению
const b = a.find((el, index, thisArray) => el.id === 3); // { 3 }

// поиск по несовпадению
const с = a.find((el, index, thisArray) => el.id !== 3); // { 2 } - вернется первый элемент

Обновление одного объекта в массиве

// есть массив аптек
const { drugstores } = store.getState().map;

// есть аптека в этом массиве, в которой нужно изменить какое-ниб поле
const drugstoreId = 123;
const updatedDrugstore = drugstores.find(
drugstore => drugstore.id === drugstoreId,
);

// перезатираем поле comment новым значением
const updatedDrugstoreData = {
...updatedDrugstore,
comment: 'Some new comment',
};

// обновляем список аптек, сначала исключаем эту аптеку со старыми данными и добавляем с новыми
dispatch(
setDrugstores([
...drugstores.filter(drugstore => drugstore.id !== drugstoreId),
updatedDrugstoreData as IDrugstoreOnMap,
]),
);

findIndex()

Если ничего не найдено вернется -1.

const a = [
{ id: 3, name: 'Не указан' },
{ id: 2, name: 'Тестовый статус' },
{ id: 0, name: 'Старый тестовый статус' },
{ id: 1, name: 'Что то происходит' },
];

// вернет индекс массива по совпадению
const index = a.findIndex((el, index, thisArray) => {
return el.name === 'Что то происходит'; // 3
});

some()

Проверяет элемент массива на соответствие какому-либо УСЛОВИЮ. Возвращает true, если хотя бы один элемент true. Когда "наткнётся" на первое true, то цикл прекращается и возвращается true.

const a = [
{ id: 3, name: 'Не указан' },
{ id: 2, name: 'Тестовый статус' },
{ id: 0, name: 'Старый тестовый статус' },
{ id: 1, name: 'Что то происходит' },
];

a.some((el, index, array) => el.id === 3); // true
a.some((el, index, array) => el.id === 33); // false


// example
const onSelectDeck = (clickedDeck: TDeckObj) => {
const isAlreadyExists = selectedDecks.some((deck) => deck.id === clickedDeck.id);

if (!isAlreadyExists) {
// add selected deck
if (selectedDecks.length < 10) {
setSelectedDecks([...selectedDecks, clickedDeck]);
}
} else {
// remove deck if already exists
setSelectedDecks(selectedDecks.filter((deck) => deck.id !== clickedDeck.id));
}
};

every()

Проверяет ВСЕ элементы массива на соответствие какому-либо УСЛОВИЮ. Возвращает false, если хотя бы один элемент false. Когда "наткнётся" на первый false, то цикл прекращается и возвращается false

const a = [
{ id: 3, name: 'Не указан' },
{ id: 2, name: 'Тестовый статус' },
{ id: 0, name: 'Старый тестовый статус' },
{ id: 1, name: 'Что то происходит' },
];

a.every((el, index, array) => el.id >= 0); // true
a.every((el, index, array) => el.id > 0); // false