未能将键和值添加到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 循环将键和值添加到字典

高效的方法将键和值添加到scala中的Set Map

从python字典如何将键和值保存到* .txt文件[关闭]

将键数组和值数组合并到 JavaScript 中的对象中

Javascript映射函数:向对象添加新键和值[重复]

高效地将 JavaScript 键和值数组转换为对象