【问题标题】:underscore _.each not adding property to object element下划线 _.each 不向对象元素添加属性
【发布时间】:2013-10-03 06:55:48
【问题描述】:

这是一个新手问题,因为仍然有一些关于 javascript 的小问题让我感到困惑。

我有以下代码:

db.units.find({}, { _id: 1, type: 1, name: 1 }).sort({ type: 1, name: 1}).exec(function(err, units) {

  if(err) return next(err);

  _.each(units, function(u, i) {
    this[i]["available"] = !_.contains(_.pluck(_.pluck(req.workorder.units, 'unit'), 'name'), u.name);

    console.log(this[i].available);  
    console.log(this[i]);  
    console.log(_.extend(this[i],{available:this[i].available}));
  }, units); 


  return res.render('workorder/show', {
    workorder: req.workorder,
    invoices: db.invoices.find({ workorders: req.params.id }),
    units: units
  });
});

结果如下:

真 {_id:513bd​​489b0e7e2634b60dc47, name: '视觉油底壳检查 UST-22C NC', 类型:“服务”}

它正在记录可用的属性,但不是单独在对象中,这是为什么呢?

【问题讨论】:

  • 在里面放一个debugger; 声明而不是console.log()。然后,当您运行它时,它会在 JavaScript 调试器中停止,您可以交互地探索对象数据。当您不确定数据格式时,这会更容易。
  • @MichaelGeary 此代码恰好在服务器端运行
  • 会不会是 "this[i]" 对象的 toString() 方法被覆盖了
  • @nilgundag 这不是问题
  • 不要使用this[i],而只使用u

标签: javascript mongoose underscore.js


【解决方案1】:

问题与猫鼬如何对待对象有关。对象只能使用 document.toObject() 修改

http://mongoosejs.com/docs/api.html#document_Document-toObject

点赞:

_.each(单位,函数(u,i){ u = _.extend(u.toObject(), {'available': !_.contains(_.pluck(_.pluck(req.workorder.units, 'unit'), 'name'), u.name) }); });

【讨论】:

    【解决方案2】:

    我怀疑 Mongoose 正在以一种使其可读但不可枚举的方式定义 available 属性。它可以使用getter,也可以使用Object.defineProperty()Object.defineProperties 调用设置enumerable: false

    如需快速测试,请尝试将此代码粘贴到 Chrome 控制台或您的 node.js 应用中:

    var obj = { a: 1 };
    Object.defineProperties( obj, {
        b: {
            get: function() {
                return 2;
            }
        },
        c: {
            value: 3,
            enumerable: false
        }
    });
    console.log( obj );
    console.log( obj.a );
    console.log( obj.b );
    console.log( obj.c );
    

    在 Chrome 中,代码日志:

    Object {a: 1}
    1
    2
    3
    

    因此,当显式读取所有三个属性时,都会显示所有三个属性,但在记录整个对象时不会枚举 bc

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多