无法增加界面中的字段

时间:2019-07-13 17:40:00

标签: javascript node.js typescript

我有一组对象(接口)。

在创建带有对象的数组之后,我需要增加一个值 每个对象内部。 (从“ 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' } ]

2 个答案:

答案 0 :(得分:0)

由于要在数组的两个位置推送相同的对象引用,因此在引用处的更改会在两个位置都反映出来,因此需要添加一个副本(我正在使用...spread syntax创建浅表副本)

由于关联性是从左到右(+ operator),因此,如果您使用x + index + 1,则将获得x01x11之类的值,如果您需要{{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);