JavaScript: проверка и добавление объекта в массив по условию

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для проверки присутствия объекта в массиве и добавления нового, если текущего нет, можно применить some():

JS
Скопировать код
!array.some(obj => obj.key === newObject.key) && array.push(newObject);

Таким образом, код проверяет существование значения newObject.key. Если оно не обнаружено в array, тогда newObject будет добавлен в этот массив.

Кинга Идем в IT: пошаговый план для смены профессии

Повышение эффективности кода с помощью функций

Функции предотвращают повторение кода и улучшают его читабельность. Они подобны отдельным предметам в чемодане для путешествия, готовым к использованию в любое время.

Для проверки присутствия объекта в массиве перед его добавлением:

JS
Скопировать код
function existsInArray(array, key, value) {
  return array.some(obj => obj[key] === value);
}

Для добавления нового объекта:

JS
Скопировать код
function addObjectToArray(array, newObject) {
  if (!existsInArray(array, 'key', newObject.key)) {
    array.push(newObject);
  } else {
    throw new Error('Объект с даннным ключом уже присутствует в массиве!');
  }
}

Уникальные идентификаторы: значение уникальности

Каждый идентификатор должен быть уникален, подобно отпечаткам пальцев. При добавлении объектов можно воспользоваться длиной массива для генерации ID:

JS
Скопировать код
function generateId(array) {
  return array.length + 1;
}

newObject.id = generateId(array);

Тем не менее, такой подход может привести к проблемам с идентификаторами. Рассмотрите использование UUID или другой надёжной стратегии.

Визуализация

Предположим, у нас есть массив домов с уникальными ID:

Markdown
Скопировать код
Квартал: [🏠{id:1}, 🏡{id:2}, 🏘️{id:3}]

Наша задача — добавить новый дом, если его до того не было:

JS
Скопировать код
let newNeighbor = {id:4};
let exists = neighborhood.some(house => house.id === newNeighbor.id);

Если он новый, мы включаем его в массив:

JS
Скопировать код
if (!exists) neighborhood.push(newNeighbor);

И вот, квартал пополнился новым домом:

Markdown
Скопировать код
Квартал: [🏠{id:1}, 🏡{id:2}, 🏘️{id:3}, 🏚️{id:4}]

Добро пожаловать в квартал!

Чистый код при помощи современного JavaScript

Применяйте возможности современного JavaScript для улучшения кода. Пример использования деструктуризации:

JS
Скопировать код
const addIfNotExist = ({ array, newObject, keyField = 'key' }) => {
  const { [keyField]: keyValue } = newObject;
  if (!existsInArray(array, keyField, keyValue)) {
    array.push(newObject);
  }
};

С помощью этого подхода код становится понятным даже для новичков в JavaScript.

Обработка исключений и параллельное выполнение

Следует учесть особые случаи, например, возможные конфликты при выполнении операций одновременно:

JS
Скопировать код
...
if (existsInArray(array, 'username', newObject.username)) {
  // Найдено совпадение пользовательских имен — ситуация требует обработки.
}
...

Полезные материалы

  1. Работа с объектами в JavaScript — статья о манипуляциях с объектами в JavaScript.
  2. ECMAScript 6: новые возможности — обзор основных особенностей ES6.
  3. Методы массивов — управление массивами при помощи этих методов.
  4. Объекты в JavaScript — детальное изучение объектов.
  5. Метод some() массива — руководство по проверке элементов массива.
  6. Map vs. ForEach — если вы столкнулись с выбором между map и forEach, этот источник поможет принять решение.
  7. Метод find() массива — учебник по поиску элементов в массиве.