将新值存储在对象数组中

时间:2018-09-17 16:25:57

标签: javascript

我想更改数组对象的值,但似乎值没有保存。我读了一些关于不可变对象的信息,但一定有某种方法可以做到这一点,我将很高兴为您提供帮助,谢谢。

app.get('/api/reservations',function(req,res) {
Rezervari.getReservations(function(err,reserv){
    if(err){
        throw err;
    }
    let datas = reserv
    for( var i=0;i < reserv.length ;i++){
      let changetime = dateformat(datas[i].data).format("MM-DD-YYYY")
       datas[i].data = changetime;
       datas[i].data = dateformat(datas[i].data).format("MM-DD-YYYY")
        console.log(datas[i].data) // 2018-09-17T21:00:00.000Z
        console.log(changetime) // 09-18-2018
    }
    res.json(datas);
});
});

编辑:对象是reservdatas(相同数组)。我想将data的字段reserv从ISO格式更改为MM-DD-YYYY格式.var changeTime中的值已更改,但data的数组中的值未更改。

2 个答案:

答案 0 :(得分:1)

如果数组中的对象为proxies,则可能会发生这种情况。这是一个如何实现类似内容的示例:

const handler = {
    get: function(obj, prop) {
        if (prop === 'data') {
            return this._data.toISOString();
        }
    },
    set: function(obj, prop, value) {
        if (prop === 'data') {
            this._data = new Date(value);
        }
    }
};

let obj = new Proxy({}, handler);
obj.data = '2018-09-17';
console.log(obj.data); // returns '2018-09-17T00:00:00.000Z'

如果是这种情况,并且想要避免代理行为,则可以将原始数组映射到一个新数组:

res.json(datas.map(item => {
    return {
        data: dateformat(item.data).format("MM-DD-YYYY")
        /* extract any other properties you're interested in from the original objects */
    };
}));

答案 1 :(得分:0)

您可以尝试克隆Javascript对象,填充新数组并返回它。这是一个示例:

let datas = [];
for (let i = 0; i < reserv.length ; i++){
  const clone = Object.assign({}, reserv[i]);
  clone.data = dateformat(reserv[i].data).format("MM-DD-YYYY");
  datas.push(clone);
}
res.json(datas);
相关问题