Object is not extensible error when creating new attribute for array of objects
Solution 1
You probably need to copy the objects:
export const initSelect = (data) => {
return data.map((item) => ({
...item,
selected: false
}));
}
Solution 2
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})
)
Solution 3
data = JSON.parse(JSON.stringify(data)));
Solution 4
const newObj = Object.assign({selected: false}, data);
Mendes
BY DAY: Working hard to turn ideas into borderline software BY NIGHT: Family, fun, barbecue and rockn´roll - go to sleep and brand new ideas again... C++, Javascript, MEAN, ReactJs, Relay and naturally C++ (never missing it) Forerunner into future.... http://stackrating.com/badge/Mendes
Updated on June 02, 2020Comments
-
Mendes about 4 years
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 fromthis.state.data
when calling the function), but this didn't seem to be a problem asnewData
is a new copy ofdata
array...I'm getting the following error:
TypeError: Cannot add property selected, object is not extensible