добавить массив по индексу во вложенный массив объекта - PullRequest
1 голос
/ 24 сентября 2019

Я создал пример кода для демонстрации своей проблемы, реальные данные намного больше

const arr = [{
  id: 1
}, {
  id: 2,
  items: [{
    id: 1
  }]
}]

const target = 2
const nextIndex = 1
newArr = arr.map(o => o.id === target ? ({
  ...o,
  items: [...o.items, {
    id: 'new id'
  }]
}) : o);

console.log(newArr);

Как вставить {id: 'new id'} по индексу?Выше код добавляется в массив элементов.Предполагая, что у меня есть событие click, пользователь может вставить позицию {id: 'new id} по индексу, я не могу использовать append, поскольку он не заменяет существующий объект.

ожидаемый результат

[{
  id: 1
}, {
  id: 2,
  items: [{
    id: 1
  },{
   id: 'something'
}]

Приведенный выше код не работает, добавление нового элемента в массив элементов без использования индекса.

Ответы [ 2 ]

0 голосов
/ 24 сентября 2019

Попробуйте передать индекс из события onClick

functionName = (i) => { //where i is index from onclick event

 arr.map( o, index) => {

  if(i === index)

  {
    const obj = {      //object
     id: 'new id'
    }
    arr[i].push(obj)   // push object at given index from onClick
  }

 }

}
0 голосов
/ 24 сентября 2019

Метод splice () изменяет содержимое массива путем удаления или замены существующих элементов и / или добавления новых элементов

const target = 2;
int index = arr.findIndex(v => v.id == target);
if (index > -1) {
  arr.splice(index, 1, {id: 'new id'}); // replace 1 with 0 if you just want to insert.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...