未能将键和值添加到javascript对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了未能将键和值添加到javascript对象相关的知识,希望对你有一定的参考价值。
我是javascript和Node等的新手,但享受开发的经验 - 我上次认真的开发是在90年代 - 我曾经是30年前的370汇编程序员!
我整天都被困在这一天。
我的问题是我正在尝试向对象数组中的条目添加新元素。我已经在这里简化了我的代码,希望我做一些令人眼花缭乱的愚蠢而且显然是错误的,虽然我已经在浏览器中使用javascript尝试了这个,但我知道我正在咆哮着正确的树。
我要做的是为返回的收藏品添加一个新的键/值对。我在这里简化了代码,但实质上是为不同的集合带来了价值。问题是设置新键的行对数组收藏中的对象没有影响。我已经尝试了几种方法,我相信这些方法都应该有效。
我可以读取返回的对象数组中的键/值,我也可以将现有键设置为新值,但设置新键不起作用。
这是我的代码:
var sendJsonResponse = function (res, status, content)
res.status(status);
res.json(content);
;
var mongoose = require("mongoose");
var Coll = mongoose.model("collectible");
var Img = mongoose.model("image");
module.exports.collectiblesList = function (req, res)
var firstImage_ids = [];
var imageDir = "https://s3.amazonaws.com/xxxxxxxxxxx/images/";
var defaultImage = imageDir + "default.jpg";
// get the collectibles
Coll.find(req.body).exec(function (err, collectibles)
if (!collectibles)
// not found
sendJsonResponse(res, 404, "message": "no collectibles found");
return;
if (err)
console.log(collectible);
sendJsonResponse(res, 400, err);
return;
//found the collectibles
// now find the list of images we need to pull (each collectible can have multiple images
collectibles.forEach(function (collectible, index)
if (collectible.image_ids)
firstImage_ids.push(collectible.image_ids[0]);
collectibles[index].imageUrl = defaultImage; // this is the line that has no effect.
collectible.imageUrl = defaultImage; // tried this too.
collectible["imageUrl"] = defaultImage; // and this. :-(
console.log(collectible);
);
sendJsonResponse(res, 200, collectibles);
);
;
使用Postman测试此API。这是返回的内容:
[
"_id": "5a43c61134aaea2025158cab",
"name": "A-0_5",
"title": "Occoneechee Lodge 104: A-0_5",
"issueDate": null,
"quantity": null,
"event_id": null,
"type": "A - Arrowhead patches",
"tag_ids": [
"5a401a17b720186ab61c649e"
],
"description": "Elangomat, no name",
"organisation_id": "5a413340b720186ab61c661e",
"supercedes_id": null,
"sortName": "A-000.5",
"image_ids": [
"5a41685ab720186ab61c663d"
],
"deleted": false,
"schemaVersion": "1.0"
,
"_id": "5a43c63334aaea2025158cac",
"name": "A-1",
"title": "Occoneechee Lodge 104: A-1",
"issueDate": null,
"quantity": null,
"event_id": null,
"type": "A - Arrowhead patches",
"tag_ids": [
"5a401a17b720186ab61c649e"
],
"description": "Service",
"organisation_id": "5a413340b720186ab61c661e",
"supercedes_id": null,
"sortName": "A-001",
"image_ids": [
"5a41685ab720186ab61c663e"
],
"deleted": false,
"schemaVersion": "1.0"
]
即它不包含imageUrl键。
谢谢你的帮助。
WWW GT
我可能误会了。但是如果你的问题是收藏品[i] .imageUrl稍后返回undefined / null,那么我相信它只是因为你需要添加
collectibles.save();
设置collectibles [i] .imageUrl值后。您可以在foreson循环之后,在json响应之前添加该行。
collectibles.forEach(function (collectible, index)
if (collectible.image_ids)
firstImage_ids.push(collectible.image_ids[0]);
collectible.imageUrl = defaultImage;
);
collectibles.save(); //here, this saves the changes done to the mongoose object.
sendJsonResponse(res, 200, collectibles);
经过很多努力,我最终解决了这个问题。 This article解释说(但我还没有完全按照解释)
我发现对象中有更多的元数据,实际的对象是_doc,所以第一个(我怀疑解决方案不满意)是将代码更新为:
collectible._doc.imageUrl = defaultImage;
更好的方法是简单地将imageUrl添加到猫鼬模型并将_doc保留在其中。问题在于,这不是我打算在mongoDB中填充的字段。
以上是关于未能将键和值添加到javascript对象的主要内容,如果未能解决你的问题,请参考以下文章
使用 for loop .splitlines 循环将键和值添加到字典