Подтвердить что ты не робот

Объект не является расширяемой ошибкой при создании нового атрибута для массива объектов

У меня есть функция, которая должна расширять массив javascript, включая новый атрибут selected:

export const initSelect = (data) => {

    let newData = data.concat();
    newData.map((item) => {
        item.selected = false;
    })

    return newData;
}

data является значением состояния ReactJS (берется из this.state.data при вызове функции), но это, похоже, не является проблемой, поскольку newData является новой копией массива data...

Я получаю следующую ошибку:

TypeError: Cannot add property selected, object is not extensible
4b9b3361

Ответ 1

Вероятно, вам нужно скопировать объекты:

export const initSelect = (data) => {
 return data.map((item) => ({
     ...item,
     selected: false       
 }));
}

Ответ 2

Вы не можете расширить item с помощью свойства selected, и ваш массив будет только мелкой копией.

Если вы хотите расширить, вам придется сделать глубокую копию вашего массива. Этого может быть достаточно:

let newData = data.map((item) => 
    Object.assign({}, item, {selected:false})
)

Ответ 3

const newObj = Object.assign({selected: false}, data);