迭代对象时

时间:2018-12-19 13:37:07

标签: javascript node.js

我有以下nodejs代码。其中,将 commentedUser.user_id.image 变量内部循环重写为与 userImage 变量多次循环写入。我用输出详细解释了。

for(var commentedUser of commentData){
    var userImage = (commentedUser.user_id.image=="")?"default.png":commentedUser.user_id.image;
    userImage = config.baseUrl+("upload/user/")+userImage;
    commentedUser.user_id.image = userImage;
}
successMessage.message = "Feed comment found successfully";
successMessage.data = commentData;
return response.send(JSON.stringify(successMessage));

输出

{
    "status": "success",
    "message": "successfully",
    "data": [{
            "_id": "5c18d8403764675cccfb4de1",
            "feed_id": "5b9a19df682d9223606d3372",
            "comment": "Feed test comment",
            "user_id": {
                "_id": "5c18c20e7f936248e2b1b724",
                "role": "user",
                "image": "http://192.168.2.21:8046/upload/user/http://192.168.2.21:8046/upload/user/default.png"
            },
            "created_at": "2018-12-18T11:21:36.388Z",
            "__v": 0
        },
        {
            "_id": "5c19ccbad517491cfc1002ee",
            "feed_id": "5b9a19df682d9223606d3372",
            "comment": "Feed test comment",
            "user_id": {
                "_id": "5c18c20e7f936248e2b1b724",
                "role": "user",
                "image": "http://192.168.2.21:8046/upload/user/http://192.168.2.21:8046/upload/user/default.png"
            },
            "created_at": "2018-12-19T04:44:42.045Z",
            "__v": 0
        }
    ]
}

在输出中,您可以看到重复的图像网址。我不知道为什么会这样。我试了很久没有成功。

  

注意: commentData 是一个对象数组。

1 个答案:

答案 0 :(得分:0)

我同意贝尔吉的上述评论。换一种说法:假设您从数据库(sql,mongodb等)中获得了这些对象;您正在查看的两个注释可能都链接到相同的用户ID 。因此,即使您遍历(示例)50个不同的注释,这些注释中的某些注释也可能在同一user_id对象上运行代码多次。

对您来说,一个简单的解决方案是确保您不对已经标准化的URL进行标准化,如下所示:

for(var commentedUser of commentData) {
    var userImage = (commentedUser.user_id.image=="")?"default.png":commentedUser.user_id.image;
    if (!userImage.startsWith("http")) {
        userImage = config.baseUrl+("upload/user/")+userImage;
    }
    commentedUser.user_id.image = userImage;
}

更一般地说,您可能会遇到错误,这可能是您在错误的位置执行此操作的信号-它可能应该在应用程序链的更深处发生,也许是在用户模型中。