【发布时间】:2015-06-18 22:49:09
【问题描述】:
我正在使用 Loopback 框架,做一个网络项目。 但我认为我在这里提出的问题与此无关,而是与一般的 Javascript / Node.JS 知识有关。
在代码的一部分,我正在做:
roleMapping.find({
where: {
principalType: 'USER',
principalId: context.principals[0].id
},
include: 'role'
}, function(err, roles){
console.log(roles[0]);
for (var i in roles)
{
if (roles[i].role.name === 'teamLeader' &&
roles[i].groupId === context.modelId)
{
cb(null,true);
}else {
cb(null,false);
}
}
});
可以,但是在尝试比较 roles[i].role.name 时失败。
所以,我去记录 roles[i] 对象包含的内容。
{ groupId: 1,
id: 3,
principalType: 'USER',
principalId: 1,
roleId: 2,
role:
{ id: 2,
name: 'teamLeader',
description: 'The leader(s) of a team',
created: null,
modified: null } }
好的,没有错,但它仍然失败,所以我尝试只打印 role 属性。令我惊讶的是:
{ [Function]
update: [Function],
destroy: [Function],
create: [Function],
build: [Function],
_targetClass: 'Role' }
那么,role 属性似乎是某种功能?但是之前是如何正确打印的呢?
最终,我在沮丧中迷失了方向,我尝试了var role = JSON.parse(JSON.stringify(roles[i]));
然后我可以正常访问对象的每个属性,但这不干净也不正常。
这是多年来 JS 编程中第一次让我大吃一惊(虽然有点业余),如果有人能向我澄清这一点,我会很高兴。谢谢
编辑:似乎它特定于这个框架,所以我正在更改标题以帮助社区。p>
【问题讨论】:
-
你能告诉我们你用来打印它们的代码吗?
-
console.log(roles[i]);打印整个对象正常,console.log(roles[i].role)打印奇怪的东西。 -
我想我见过 mongodb 做类似的奇怪的事情。
roles[i]有.toJSON方法吗? -
是的,您似乎需要以某种方式提取实际值(您的对象)。看起来记录的对象实际上可能是一个函数。
roles[i]()会返回什么吗? -
Thay 可能与
for (... in ...)循环的行为有关。您可以尝试改用for (var i = 0, length = roles.length; i < length; i++) { <your code here> }。见developer.mozilla.org/en/docs/Web/JavaScript/Reference/…
标签: javascript node.js loopbackjs