【发布时间】:2017-03-31 14:31:12
【问题描述】:
在下面的代码中,user.roles 的实际长度为 1。但是,循环运行了两次。
当我输出 i 的值时,它在第二次迭代中显示为 'diff'。 切换到普通的 for 循环解决了这种情况。 但是,我想知道 for..in 循环有什么问题。
for (var i in user.roles) {
if (user.roles[i].school.equals(schoolId)) {
for (var j in user.roles[i].permissions) {
for (var k in accessType) {
if (user.roles[i].permissions[j].feature == featureKey) {
if (user.roles[i].permissions[j][accessType[k]]) {
return true;
}
}
}
}
}
}
更新:用户是一个对象,角色是一个对象数组。导致问题的角色实例如下所示:
{
"_id": "582d3390d572d05c1f028f53",
"displayName": "Test Teacher Attendance",
"gender": "Male",
"roles": [
{
"_id": "57a1b3ccc71009c62a48a684",
"school": "57a1b3ccc71009c62a48a682",
"role": "Teacher",
"__v": 0,
"designation": true,
"permissions": [
{
"feature": "User",
"_id": "57ac0b9171b8f0b82befdb7d",
"review": false,
"view": true,
"delete": false,
"edit": false,
"create": false
},
{
"feature": "Notice",
"_id": "57ac0b9171b8f0b82befdb7c",
"review": false,
"view": true,
"delete": false,
"edit": false,
"create": false
},
]
}
],
}
【问题讨论】:
-
你能定义用户、角色、权限、访问类型吗?这些是对象、字符串、整数。
-
user.roles是一个数组/迭代器吗?也许你应该使用for .. of -
你为什么使用
for in?尝试使用forEach。它更方便。 stackoverflow.com/questions/23614054/… -
@Teocci user.roles 是对象数组,权限是 user.roles 中的对象数组。 accessType 是一个字符串数组。
-
@AllenGJ 你能把我的问题标记为答案吗?
标签: javascript arrays node.js for-loop