sarkis-tlt
@sarkis-tlt
Full Stack Web Developer (ReactJS/MeteorJS/NodeJS)

Перебор массива с обьектами, с поиском исключений?

Представим что у нас есть некий пустой массив который будет в дальнейшем использоваться в качестве калекции для обьектов:
let arr = [];
каждый хранимый обьект будет хранить ряд свойст и уникальный идентификатор:
let obj = {_id: '', , , };
надо перебрать массив так что бы:
- если масив пустой мы просто пушай обьект.
- если в массиве нет данного обьекта мы его пушаем.
- и главное, если в массиве есть обьект с данным ключом (_id) мы заменяем его на новый обьект с новыми свойствами но с тем же ключем (_id) и сохранив ту же позицию в массиве.

Буду благодарен любой помощи, уже замылил голову и ничего из простого решения, на такую простую задачу не приходит.
  • Вопрос задан
  • 298 просмотров
Решения вопроса 1
Lynn
@Lynn
nginx, js, css
Код который использует неочевидную особенность работы цикла ;-)
for (var idx = 0; idx < arr.length; idx++) {
  if (arr[idx]._id === obj._id) break;
}
// Либо сработал break и idx это индекс элемента с совпадающим _id,
// либо цикл добежал до конца и idx = arr.length и элемент добавится
// в конец массива (фактически то же что и push)
arr[idx] = obj;
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
var idx = arr.indexOf((item) => item.id === obj._id);
if (-1 !== idx) {
    arr[idx ] = obj;
} else if (!arr.length) {
    arr.push(obj);
}


у вас 3-ий кейс как бы покрывает два предыдущих.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы