2017-01-28 127 views
0

我試圖編寫一個函數,它將通過一個保存對象的變量進行迭代。如果您傳遞的是名爲屬性的名字,則應該爲true。如果不是,你應該得到錯誤。但是,無論我通過這個函數傳遞什麼,我總是會得到錯誤的。任何幫助是極大的讚賞。試圖在對象中使用for循環if else else語句

var contacts = [ 
{ 
    "firstName": "Akira", 
    "lastName": "Laine", 
    "number": "0543236543", 
    "likes": ["Pizza", "Coding", "Brownie Points"] 
}, 
{ 
    "firstName": "Harry", 
    "lastName": "Potter", 
    "number": "0994372684", 
    "likes": ["Hogwarts", "Magic", "Hagrid"] 
}, 
{ 
    "firstName": "Sherlock", 
    "lastName": "Holmes", 
    "number": "0487345643", 
    "likes": ["Intriguing Cases", "Violin"] 
}, 
{ 
    "firstName": "Kristian", 
    "lastName": "Vos", 
    "number": "unknown", 
    "likes": ["Javascript", "Gaming", "Foxes"] 
} 
]; 


function attempt(firstName){ 
for(var i = 0;i < contacts.length; i++){ 
    if(contacts[i].firstName==firstName){ 
    return true; 
    } else { 
     return false; 
    } 
} 
} 
+1

這經常發生足夠的*必須*是一個dupetarget它... –

+0

你的'標題'不問任何或暗示問題的解決。 – vsync

+0

注意:如果你發現自己寫了'if(a == b){return true; } else {return false; }',停止並寫入'return a == b;'代替。它確實**完全相同。 –

回答

2

通過邏輯思考片刻:第一個循環會發生什麼?該功能對if/else的迴應是什麼?對!它返回truefalse馬上,沒有循環通過剩餘的條目。

您需要完全移除else和移動return false循環:

function attempt(firstName) { 
    for (var i = 0; i < contacts.length; i++) { 
     if (contacts[i].firstName == firstName) { 
      return true; 
     } 
    } 
    return false; 
} 

旁註:Array#some是專爲正是這種使用情況:

function attempt(firstName) { 
    return contacts.some(function(entry) { 
     return entry.firstName == firstName; 
    }); 
} 
+0

@ibrahimmahrir - 編輯時請注意,注意「別人編輯了這個」警告。 –

+1

是的。網絡緩慢,它甚至沒有加強。 –

+0

你是不是要吹掉'==='?因爲沒有它,你可以通過'0'並匹配「」。很難想象這是問題中所描述的意圖。 – pvg