我有一组对象(接口)。
在创建带有对象的数组之后,我需要增加一个值 每个对象内部。 (从“ x1”到“ x2”)。
在迭代结束时,所有的“ x1”和“ x2”值都是索引的最新值。
let data: any = [];
let object: any = {
xaxis: null,
yaxis: null,
}
data.push(object)
data.push(object)
const doTHIS = () => {
const newData = data.map((item: any, index: any) => {
item.xaxis = 'x' + index + 1;
item.yaxis = 'y' + index + 1;
return item
});
return newData;
}
预期结果:
[ { xaxis: 'x1', yaxis: 'y1' }, { xaxis: 'x2', yaxis: 'y2' } ]
实际结果:
[ { xaxis: 'x2', yaxis: 'y2' }, { xaxis: 'x2', yaxis: 'y2' } ]
答案 0 :(得分:0)
由于要在数组的两个位置推送相同的对象引用,因此在引用处的更改会在两个位置都反映出来,因此需要添加一个副本(我正在使用...spread syntax
创建浅表副本)
由于关联性是从左到右(+ operator
),因此,如果您使用x + index + 1
,则将获得x01
和x11
之类的值,如果您需要{{1 }}和x1
,您需要使用x2
x + ( index + 1 )
旁注 :-使用camelCase let data = [];
let object = {
xaxis: null,
yaxis: null,
}
data.push({...object})
data.push({...object})
const doThis = () => {
const newData = data.map((item, index) => {
item.xaxis = 'x' + (index + 1);
item.yaxis = 'y' + (index + 1);
return item
});
return newData;
}
console.log(doThis())
代替doThis
答案 1 :(得分:0)
将同一对象两次推入Array。
该数组中的所有索引都指向同一对象(data[0] === data[1]
),因此循环中的每个更改都针对同一对象。
根据您的代码,在我看来,您是编程的新手。我想你想做的是这样:
let data = Array.from({ length: 2 }, (,index) => { //we don't need the first argument here
return {
xaxis: 'x' + (index + 1),
yaxis: 'y' + (index + 1),
};
});
console.log(data);