【问题标题】:Node.js loop through array doesn't show entire objectsNode.js 循环遍历数组不显示整个对象
【发布时间】:2016-06-10 06:28:03
【问题描述】:

我在 Node.js 中发现了数组的奇怪行为

谷歌搜索没有帮助。 Ofc,这可能会导致我的疲劳。如果是这样,我很抱歉。

那么,我的模型

var UserSchema = new mongoose.Schema({
    id: mongoose.Schema.ObjectId,
    added: {
        type: Date,
        default: Date.now()
    },
    displayName: String,
    cart: [{
        orderNumber: mongoose.Schema.ObjectId,
        exposition: Object,
        offer: Object,
        state: Number,//1 - Unpaid
    }],
});

在控制器中我试图循环遍历购物车数组

    var cartId = new ObjectId(req.body.id);
    mongoose.model('User').findById(currentUser.userId, function (err, user) {
        var cart = user.cart;
        console.log(cart);
        var expId = -1;
        if (cart) {
            for (var i = 0; i < cart.length; i++) {
                var cartItem = cart[i];
                console.log(cartItem);
                if (cartItem._id === cartId) {
                    console.log("SHIT");
                    expId = user.cart.exposition._id;
                    break;
                }
            }
        }
    });

我没有找到比循环更好的在用户中查找嵌入式购物车的解决方案。 所以,当我记录我的购物车对象时

console.log(cart);

我得到了正确的对象,它工作正常,但是当我尝试登录时

console.log(cartItem);
console.log(cart[0]);

我只得到

[object Object]
[object Object]

我做错了什么?

【问题讨论】:

  • JSON.stringify 在控制台记录之前你的对象。然后您应该会看到该对象的字符串表示形式。

标签: javascript arrays node.js mongoose


【解决方案1】:

这是对象的默认toString()。试试

console.log(JSON.stringify(cartItem));
console.log(JSON.stringify(cart[0]));

如果您想查看对象的结构。

【讨论】:

  • 我知道我的对象的结构。我想将它的 id 与 cartId 进行比较。所以,它不起作用。我敢肯定,ID​​ 是相等的。
  • === 如果您尝试比较两个不同的对象,则将始终失败。你试过cartId.equals(cartItem._id) 吗?
  • 不管我现在如何比较对象。对我来说更重要的是为什么我必须使用 stringify 来访问我的对象的结构?
  • 因为Object 的默认toString() 实现只返回[object Object]。如果您希望它采用人类可读的格式(即 JSON),则必须对其进行转换。
【解决方案2】:

问题:

出现此问题是因为您使用的是findById() 在数组中返回结果

据我所知,User 文档中只能有一条用户记录

解决方案: 使用返回单个用户结果的findOne(),您可以遍历user.carts

【讨论】:

    猜你喜欢
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 2016-07-28
    • 2017-01-29
    相关资源
    最近更新 更多