2017-02-02 78 views
1

請問能告訴我爲什麼我的腳本壞了? 這是一個在Udemy課的練習。 你只需要返回誰擁有管理員級別的訪問權限的用戶過濾器陣列方法javascript

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'); 

謝謝

+2

'真==「我認爲true'' – SLaks

+0

'isAdmin'是‘上游’,並應作爲內部的功能。過濾()。此外,將其稱爲「isAdmin」*和*給它的屬性名稱是多餘的。不應該isAdmin總是知道它應該檢查管理員的財產? –

回答

2

您需要測試對一個布爾值,因爲你的數據具有truefalse值。

return key[property] === true; 
//      ^^^^ 

function isAdmin(array, property) { 
 
    return array.filter(function (key) { 
 
     return key[property] === 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(users, 'admin'); 
 

 
console.log(filteredUsers);

+0

謝謝正如你指出的那樣,它使我明白它的價值。我只是沒有意識到這一點。 –

0

)你的問題是,您使用的是3等於唱( 「===」)來測試proprety。這裏有更多的細節,解釋之間的差異的鏈接:

https://stackoverflow.com/a/523650/5235299

+0

取決於你的觀點。我看到它的方式,使用三個等號是正確的事情,但你需要比較'true',而不是'true''。但這可能是一些人的宗教問題(如我自己; D)。 –

+0

問題是我沒有意識到布爾值作爲屬性,但字符串。正如妮娜指出的那樣,我直截了當地意識到自己的錯誤。 –