Sedbol
@Sedbol

Как обновить или добавить в массив объект?

Как обновить или добавить в массив объект?
Допустим есть массив
let arr = [];
Он может быть пустой либо содержать объекты
arr=[{"id":1,"red":1000},{"id":2,"red":1000},{"id":3,"black":1000}];

Как в него добавить или обновить объект? Если объект существует то его обновить если нет такого объекта то добавить.
Допустим в массиве объектов есть уже id2
arr=[{"id":1,"red":1000},{"id":2,"red":1000},{"id":3,"black":1000}];

как его обновить? Как пример возьму setInterval ("setInterval"для примера ) функция добавляет новый объект в массив. А надо если есть только обновить а не добавлять.

let arr = [];
    arr=[{"id":1,"red":1000},{"id":2,"red":1000},{"id":3,"black":1000}]
    setInterval(function () {
        let append={"id":2,"black":1000};
        arr = [...arr,append];      
    },1000)
  • Вопрос задан
  • 1099 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
const obj = arr.find(n => n.id === newObj.id);
if (obj) {
  Object.assign(obj, newObj);
} else {
  arr.push(newObj);
}
Ответ написан
lastuniverse
@lastuniverse
Всегда вокруг да около IT тем
// функция с "МАГИЕЙ"
var upsertItem = (arr, item)=>{
   let isFound = false;
   arr = arr.map(obj=>{
      if( obj.id==item.id ){
         isFound = true;
         return item;
      }else{
         return obj;
      }
   });
   if( !isFound )
     arr.push(item);
   return arr;
}

// используем
arr=[{"id":1,"red":1000},{"id":2,"red":1000},{"id":3,"black":1000}];

// обновит элемент
   arr = upsertItem(arr, {"id":1,"red":0});
   console.log(JSON.stringify(arr));
   // выведет: [{"id":1,"red":0},{"id":2,"red":1000},{"id":3,"black":1000}]

// добавит элемент
   arr = upsertItem(arr, {"id":4,"blue":0});
   console.log(JSON.stringify(arr));
   // выведет: [{"id":1,"red":0},{"id":2,"red":1000},{"id":3,"black":1000},{"id":4,"blue":0}]
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
joeberetta
@joeberetta Куратор тега JavaScript
Читай: https://epdf.pub/google-for-dummies.html
Поискали бы сначала в гугле, нашли бы уже готовый ответ
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы