次のコードでは、user.rolesの実際の長さは1です。ただし、ループは2回実行されます。Javascript:for..inループが予想よりも多く実行される
私がiの値を出力すると、2回目の反復では「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;
}
}
}
}
}
}
更新:ユーザーはオブジェクトであり、rolesはオブジェクトの配列です。問題の原因となったロールのインスタンスは以下の通りである:
{
"_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
},
]
}
],
}
ユーザー、ロール、アクセス許可、アクセスタイプを定義できますか?それらはオブジェクト、文字列、整数です。 – Teocci
'user.roles'は配列/イテレータですか?たぶんあなたは 'for .. of'を使うべきです – zeronone
' for 'をなぜ使うのですか? 'forEach'を使ってみてください。より便利です。 http://stackoverflow.com/questions/23614054/javascript-nuances-of-myarray-foreach-vs-for-loop –