过滤数组方法javascript

过滤数组方法javascript,javascript,filter,Javascript,Filter,你能告诉我为什么我的剧本坏了吗? 这是我课堂上的一个练习。 您只需要返回具有管理员级别访问权限的用户 var users = [ { id: 1, admin: true }, { id: 2, admin: false }, { id: 3, admin: false }, { id: 4, admin: false }, { id: 5, admin: true }, ]; var filteredUsers; function isAdmin(array, propert

你能告诉我为什么我的剧本坏了吗? 这是我课堂上的一个练习。 您只需要返回具有管理员级别访问权限的用户

var users = [
 { id: 1, admin: true },  
 { id: 2, admin: false },
 { id: 3, admin: false },
 { id: 4, admin: false },
 { id: 5, admin: true },
];

var filteredUsers;

function isAdmin(array, property){
     return array.filter(function(key){
        return key[property] === 'true';
})
}

filteredUsers = isAdmin(users, 'admin');

谢谢

您需要针对布尔值进行测试,因为您的数据具有
true
false

return key[property] === true;
//                       ^^^^
函数isAdmin(数组、属性){
返回数组.filter(函数(键){
返回键[属性]==true;
//                       ^^^^
});
}
var users=[{id:1,admin:true},{id:2,admin:false},{id:3,admin:false},{id:4,admin:false},{id:5,admin:true}],
filteredUsers=isAdmin(用户“admin”);
控制台日志(过滤器读写器))您的问题是您正在使用3个相等的符号(“==”)来测试属性。下面是一个链接,其中包含更多详细信息,解释了以下两者之间的区别:


正确!='true'
我认为
isAdmin
是一个“谓词”,应该用作.filter()中的函数。此外,将其称为“isAdmin”并为其指定属性名也是多余的。isAdmin不应该总是知道它应该检查admin属性吗?谢谢你指出了boolen值,这让我明白了。我只是没有意识到。这取决于你的观点。在我看来,使用三个等号是正确的做法,但您需要与
true
进行比较,而不是与
“true”
进行比较。但对于某些人(比如我自己)来说,这可能是一个宗教问题。问题是我没有意识到布尔值是属性,而是字符串。正如尼娜指出的,我明白了,并意识到了我的错误。