【问题标题】:node not printing full object节点不打印完整对象
【发布时间】:2015-09-12 05:09:21
【问题描述】:

我被难住了..

我在控制台中用另一个包含嵌套数组的对象测试了这个方法,得到了预期的结果

db_status_emitter.on("components_found", function (returned_item) {
    //console.log(returned_item);
    prun_item.type = returned_item.type;
    prun_item.components = returned_item.components.slice(0);
    switch (prun_item.type) {

        case "one-sided-mattress":

            prun_item.quantity = prun_item.total_panel_quantity;
            var top_panel = underscore.find(prun_item.components, function (element) {
                return element.component_category == "top-panel"
            });
            var border = underscore.find(prun_item.components, function (element) {
                return element.component_category == "border"
            });
            top_panel.quantity = border.quantity = prun_item.quantity;
            top_panel.style = "91000000";
            border.style = "81000000";
            break;

        case "two-sided-mattress":

            prun_item.quantity = prun_item.total_panel_quantity / 2;
            var top_panel = underscore.find(prun_item.components, function (element) {
                return element.component_category == "top-panel"
            });
            var bottom_panel = underscore.find(prun_item.components, function (element) {
                return element.component_category == "bottom-panel"
            });
            var border = underscore.find(prun_item.components, function (element) {
                return element.component_category == "border"
            });
            top_panel.quantity = bottom_panel.quantity = border.quantity = prun_item.quantity;
            top_panel.style = "91000000";
            bottom_panel.style = "92000000";
            border.style = "81000000";
            break;

        default:
            console.error("error with prun Schedule");
            break;
    }
    console.log(prun_item);
});

//编辑:我应该在这里添加猫鼬调用;它与 .on() 函数在同一范围内......我

fex_model.findOne({_id: prun_item.model}, {components: 1, type: 1, _id: 0}, function (err, returned_item){
    if (err) db_status_emitter.emit("error", err)
    db_status_emitter.emit("components_found", returned_item);
})

为什么没有一个组件显示我给它们添加的键值对?这是输出的示例..

{ quilter_name: 'Panel Quilter #3',
schedule_no: 55f32e4470df49a65d03cf6a,
model: '3630',
size: '66',
total_panel_quantity: 72,
type: 'two-sided-mattress',
components: 
 [ { component_category: 'top-panel', buffer_op: '120' },
   { component_category: 'bottom-panel', buffer_op: '120' },
   { component_category: 'border', buffer_op: '119' } ],
quantity: 36 }

但应该是:

{ quilter_name: 'Panel Quilter #3',
schedule_no: 55f32e4470df49a65d03cf6a,
model: '3630',
size: '66',
total_panel_quantity: 72,
type: 'two-sided-mattress',
components: 
 [ { component_category: 'top-panel', buffer_op: '120', quantity: 36, style: "91000000" },
   { component_category: 'bottom-panel', buffer_op: '120', quantity: 36, style: "92000000" },
   { component_category: 'border', buffer_op: '119', quantity: 36, style: "81000000" } ],
quantity: 36 }

但为什么在控制台上执行相同的过程???

>underscore.extend(extended_this_object, components_wrapper);
{ foo: 'bar',
  components: 
   [ { a: 'findthis', b: '3', c: '4', d: 'new value' },
     { a: 'notthis', b: '4', c: '5' } ] }
>var foundthis2 = underscore.find(extended_this_object.components, function(element){ return element.a == 'findthis'});

>foundthis2
{ a: 'findthis', b: '3', c: '4', d: 'new value' }
>foundthis2.e = 'a newer value'
'a newer value'
>extended_this_object;
{ foo: 'bar',
  components: 
   [ { a: 'findthis',
       b: '3',
       c: '4',
       d: 'new value',
       e: 'a newer value' },
     { a: 'notthis', b: '4', c: '5' } ] }

编辑这是单个组件的键的输出..我怀疑它与它来自猫鼬有关...

[ '__parentArray',
  '__parent',
  '__index',
  '$__',
  'isNew',
  'errors',
  '_doc',
  '$__original_save',
  'save',
  '_pres',
  '_posts',
  'quantity',
  'style' ]

请注意数量和样式本身就是属性,我怀疑记录的属性在 _doc 中的某个位置。

【问题讨论】:

  • 为了避免这种混淆,你应该重构你的分配。你也可以重新缩进你的代码吗?读起来不容易。
  • 重构我的作业是什么意思? :( 另外,在重新缩进时,是否应该有更多的空格(换行符)?还是缩进之间有 8 个空格而不是 4 个空格?
  • 你可以使用 JSFiddle 中的 TidyUp 来重新缩进,这样就够了,它会更容易阅读。重构是重新组织代码的操作。使用函数来处理这些数据。
  • 在上面的 EDIT 中调用 toObject() 以避免像 '__parentArray' 这样的猫鼬不需要的属性:for (var curr_key in user.toObject()) {跨度>

标签: javascript node.js mongoose underscore.js


【解决方案1】:

起初我认为这是一个有趣的问题,但后来我意识到这毫无意义。我尝试在 js 文件中做各种类似的事情并nodeing 它,但我无法复制你遇到的情况。

要么是日志消息不是来自console.log,要么是重启服务器后无法复制这个问题(V8 中暂时出现了问题?)。

您是否尝试过将日志参数更改为 prun_item.components[0].quantity 之类的东西?

或者你的原始代码可能比这复杂得多,修改从_.find返回的对象不会修改你console.log的对象,这是唯一合乎逻辑的解释。

【讨论】:

  • 你一针见血。 Mongoose 返回一个包含一堆属性的对象数组,这些属性我真的不应该弄乱。我正在对其进行切片并尝试通过使用参考来更改它。馊主意。我稍后会改写这个问题并提供一个解决方案,以便它可能对最终可能会做同样事情的人有用。
猜你喜欢
  • 2019-03-08
  • 1970-01-01
  • 2013-12-31
  • 1970-01-01
  • 1970-01-01
  • 2017-08-27
  • 1970-01-01
  • 2017-12-28
  • 1970-01-01
相关资源
最近更新 更多