Обновление свойства внутри вложенного массива объекта

#javascript #reactjs

#javascript #reactjs

Вопрос:

У меня есть этот массив, и я хотел обновить выбранный шаблон frameId внутри определенного объекта, используя идентификатор
, который я пробовал, но если я выберу frameId = 1, например, отредактируется весь шаблон frameId 1, мне нужен только выбранный идентификатор.

  sizes.map(size => {
      if(size.id === id){
        size.frames.map(frame => {
          if(frame.frameId === frameId){
            frame.template = {test: '101'}
          }
          return frame
        })
      }
      return size
    })
 
 [
    {
      id: 1,
      name: 'Mrec',
      frames: [
        {
          frameId: 1,
          template: {},
          img: [],
        },
        {
          frameId: 2,
          template: {},
          img: [],
        },
      ],
      active: false
    },
    {
      id: 2,
      name: 'Leaderboard',
      frames: [
        {
          frameId: 1,
          template: {},
          img: [],
        },
        {
          frameId: 2,
          template: {},
          img: [],
        },
      ],
      active: false
    }
]
 

Комментарии:

1. Я думаю, у вас должна быть опечатка if(frame.id === frameId) if(frame.frameId === frameId) . Измените это, и оно должно работать

2. @ptothep tnx bud

Ответ №1:

Я думаю, что правильный способ заключается в следующем. (#edit: это работает с фрагментом)

 var id = 1,
frameId=2;
var sizes = [
    {
      id: 1,
      name: 'Mrec',
      frames: [
        {
          frameId: 1,
          template: {},
          img: [],
        },
        {
          frameId: 2,
          template: {},
          img: [],
        },
      ],
      active: false
    },
    {
      id: 2,
      name: 'Leaderboard',
      frames: [
        {
          frameId: 1,
          template: {},
          img: [],
        },
        {
          frameId: 2,
          template: {},
          img: [],
        },
      ],
      active: false
    }
]

sizes.map(size => {
        let frames;
        if (size.id === id) {
            frames = size.frames.map(frame => {
                if (frame.frameId === frameId) {
                    frame.template = { test: '101' }
                }
                return frame;
            })
        } else {
            frames = size.frames;
        }
        return {...size,frames}
    })
document.write(JSON.stringify(sizes)) 

Комментарии:

1. все тот же вывод, каждый идентификатор фрейма заполняется

2. Не могли бы вы запустить фрагмент