gpt4 book ai didi

Javascript:for..in 循环运行次数超过预期

转载 作者:数据小太阳 更新时间:2023-10-29 05:25:04 25 4
gpt4 key购买 nike

在下面的代码中,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;
}
}
}
}
}
}

更新:user是一个对象,roles是一个对象数组。导致问题的 Angular 色实例如下所示:

{
"_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 in。

简单的例子

var arr = [2];
arr.s = 3;

for (var i in arr) {
console.log("here"); // paints twice
}

来自 MDN , for...in 语句以任意顺序迭代对象的可枚举属性。对于每个不同的属性,可以执行语句。

如何选择迭代器的类型,这里有引用iterators

编辑

根据更新后的问题,如果以下代码中某处存在,则以上内容只能带有 diff 属性

Array.prototype.diff = .....

关于Javascript:for..in 循环运行次数超过预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40648287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com