I have a function that needs to extend a javascript array, including a new attribute called selected:
export const initSelect = (data) => {
let newData = data.concat();
newData.map((item) => {
item.selected = false;
})
return newData;
}
data is a ReactJS state value (comes from this.state.data when calling the function), but this didn't seem to be a problem as newData is a new copy of data array...
I'm getting the following error:
TypeError: Cannot add property selected, object is not extensible
You probably need to copy the objects:
export const initSelect = (data) => {
return data.map((item) => ({
...item,
selected: false
}));
}
You can not extend item with selected property, and your array is just a shallow copy.
If you want to be able to extend, you will have to do a deep copy of your array. It may be enough with:
let newData = data.map((item) =>
Object.assign({}, item, {selected:false})
)
data = JSON.parse(JSON.stringify(data)));