gpt4 book ai didi

javascript - JSON 中的嵌套数组 : Push/Unshift with date object creates double entry

转载 作者:行者123 更新时间:2023-12-03 11:54:30 25 4
gpt4 key购买 nike

我在使用 JavaScript 时遇到了奇怪的行为。我正在尝试在 JavaScript (node.js/express) 中构造一个像这样的 JS 对象

var docAudit = {date: nowObj, changed: {}};
docAudit.changed['N5'] = 'DieterDorian';

console.log(docAudit) 现在按预期打印出来:

{ date: Thu Sep 04 2014 11:00:00 GMT+0200 (CEST),
changed: { N5: 'DieterDorian' } }

现在我想将此 docAudit 对象推送或取消移动到“ip”JSON 中的“history”数组(从 mongoDB 获取)

ip: {
__v: 15
_id: "53fb42bf52b6542527cb7d23"
aktuell: {
N5: "HansHerschel"
Auftragsnr: "2018"
}
historie: [
{
date: "2014-09-04T09:53:20.533Z"
changed: {
N5: "HansHerschel"
}
]
}

现在这个操作:

ip.historie.unshift(docAudit);

应将 docAudit 对象添加到“ip”JSON 对象内的 historie 数组前面。然而发生的事情是这样的:

    ip: {
__v: 16
_id: "53fb42bf52b6542527cb7d23"
aktuell: {
// not important what happens here
}
historie: [
{
date: "2014-09-04T11:00:00.533Z"
changed: {
N5: "DieterDorian"
},
{
date: "2014-09-04T11:00:00.533Z"
},
{
date: "2014-09-04T09:53:20.533Z"
changed: {
N5: "HansHerschel"
}
]
}

因此,会发生一个额外的 Date 对象被插入“history”数组中。我想我可能错误地构建了“docAudit”对象。预期输出只是将 docAudit 推送到数组中,而不需要额外的日期对象。

或者如果我使用 console.log(ip) 打印出“ip”对象:

{ changed: {}, date: Thu Sep 04 2014 11:48:51 GMT+0200 (CEST) },
{ date: Thu Sep 04 2014 11:48:51 GMT+0200 (CEST),
changed: [Object] } ] }

这是我的路由代码:

  updateIP = function(req, res) {

return IP.findById(req.params.id, function(err, ip) {
if(!ip) {
res.statusCode = 404;
return res.send({ error: 'Not found' });
}

var docAudit = {'changed':{}, 'date': nowObj};
docAudit.changed.N5 = 'DieterDorian'
ip.historie.unshift(docAudit);

ip.markModified('aktuell');
ip.markModified('historie');

return ip.save(function(err) {
if(!err) {
console.log('Updated');
return res.send({ status: 'OK', ip:ip });
} else {
if(err.name == 'ValidationError') {
res.statusCode = 400;
res.send({ error: 'Validation error' });
} else {
res.statusCode = 500;
res.send({ error: 'Server error' });
}
console.log('Internal error(%d): %s',res.statusCode,err.message);
}
res.send(ip);
});
});
};

更新:

我认为问题是以下分解代码是否正确:

 updateIP = function(req, res) {
return IP.findById(req.params.id, function(err, ip) {

// alter the ip JSON here...

ip.save(function(err) {
if(!err) {
return res.send({ status: 'OK', ip:ip });
}
}
});
}

最佳答案

首先,您的“ip”结构不正确,我已更正它:

ip: 
{
__v: 15,
_id: "53fb42bf52b6542527cb7d23",
aktuell: {
N5: "HansHerschel",
Auftragsnr: "2018"
},
historie: [
{
date: "2014-09-04T09:53:20.533Z",
changed:
{
N5: "HansHerschel"
}
}
]

};

申请时,

var count = ip.historie.unshift(docAudit);

我得到了正确的预期结果,计数为 2。

{"__v":15,"_id":"53fb42bf52b6542527cb7d23",
"aktuell":{"N5":"HansHerschel","Auftragsnr":"2018"},
"historie":[
{"date":"x","changed":{"N5":"DieterDorian"}},
{"date":"2014-09-04T09:53:20.533Z","changed":{"N5":"HansHerschel"}}
]}

检查您是否进行了两次升档。

关于javascript - JSON 中的嵌套数组 : Push/Unshift with date object creates double entry,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25662860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com