Найди и добавить объект

[
  {
    "id": 1,
    "name": "Алексей",
    "base": [
      {
        "user_class": 1,
        "type": 1,
      },
      {
        "user_class": 1,
        "type": 4,
      },
    ]
  },
  {
    "id": 2,
    "name": "Сергей",
    "base": []
  }
]

Как с помощью JavaScript найти по id == 2 пользователя Сергей и добавить к нему в base объект


Ответы (2 шт):

Автор решения: vsemozhebuty

Например, так:

const users = [
  {
    "id": 1,
    "name": "Алексей",
    "base": [
      {
        "user_class": 1,
        "type": 1,
      },
      {
        "user_class": 1,
        "type": 4,
      },
    ]
  },
  {
    "id": 2,
    "name": "Сергей",
    "base": []
  }
];

const foundUser = users.find(user => user.id === 2);

foundUser.base.push({});

console.log(users);

→ Ссылка
Автор решения: Ajeet Shah

Если вы не хотите изменять исходные данные:

Создайте копию, find и push:

const data = [{
    "id": 1,
    "name": "Алексей",
    "base": [
      {"user_class": 1,"type": 1,},
      {"user_class": 1,"type": 4,},
    ]
  },
  {
    "id": 2,
    "name": "Сергей",
    "base": []
  }
]

function findAndAdd(data, id, obj) {
  const copy = data.map(d => {
    return { ...d,
      base: [...d.base]
    }
  })
  const index = copy.findIndex(d => d.id === id)
  if (index > -1) {
    copy[index].base.push(obj)
  }
  return copy
}

console.log('before', data)
console.log('new', findAndAdd(data, 2, {
  "user_class": 10,
  "type": 10,
}))
console.log('after', data)

→ Ссылка