【发布时间】: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