在以下代碼中,user.roles的實際長度爲1.但是,循環運行兩次。Javascript:for..in循環運行的次數比預期的多
當我輸出i的值時,第二次迭代顯示爲'diff'。 切換到普通for循環解決了這種情況。 但是,我想知道在循環中是什麼問題。
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
},
]
}
],
}
你能定義用戶,角色,權限,accessType嗎?那些是對象,字符串,整數。 – Teocci
'user.roles'是一個Array/Iterator嗎?也許你應該使用'for .. of' – zeronone
爲什麼你使用'for in'?嘗試使用'forEach'。它更方便。 http://stackoverflow.com/questions/23614054/javascript-nuances-of-myarray-foreach-vs-for-loop –