2017-08-29 75 views
0

首先首先感謝您對我遇到的這個問題的任何迴應。 我對JS很陌生,覺得這段代碼應該非常直截了當,但它不能按預期工作。如何使用提示輸入來循環顯示對象數組並顯示屬性

我想按名稱搜索數組中的這些對象,並且如果在數組中找到名稱(通過提示符獲得),我想顯示該對象的ID。

如果我在提示符中鍵入'Jef',就會得到ID;但如果我輸入'史蒂夫'或'瑞恩',我什麼也得不到。我也注意到,無論我輸入什麼而沒有添加中斷,循環似乎都會結束。我認爲循環正在破裂,但我不知道是什麼導致它在「If」條件滿足之前破壞。請幫忙!

var array = [{ 
 
    name: 'Jef', 
 
    age: 29, 
 
    id: '000' 
 
    }, { 
 
    name: 'Steve', 
 
    age: 28, 
 
    id: '001' 
 
    }, 
 
    { 
 
    name: 'Ryan', 
 
    age: 28, 
 
    id: '002' 
 
    } 
 
]; 
 

 
var i; 
 

 
for (i = 0; i < array.length; i++) { 
 
    if (prompt() == array[i].name) { 
 
    console.log(array[i].id) 
 
    } 
 
}

+0

當您按照定義的順序輸入名稱時,我會得到所有預期的響應。有沒有理由讓你在循環中提示?正如你所描述的那樣,循環不會像我一樣結束。 – spanky

+0

也許你在提示窗口中檢查了「阻止此頁面創建額外的對話框」複選框? – spanky

回答

0

試試這個。您需要對數組進行排序並執行強匹配,然後返回ID。

function NameExists(strName,objectArray) 
{ 
    //convert to lower for type sensitive 
    strName = strName.toLowerCase(); 
    for(var i = 0; i <objectArray.length; i++) 
    { 
     //convert to lower for type sensitive 
     var comparison = objectArray[i].Name.toLowerCase(); 

     if(comparison.match(strName)==comparison) 
      return objectArray[i].id; 
    } 
} 
+0

謝謝你的幫助。非常感謝! –

1

你這樣做的方式很接近。你只需要在循環外部放置prompt()。一旦你有了搜索的輸入,你就可以遍歷整個對象的數組。

例如:

var nameInput = prompt(); 
for (i =0; i < array.length; i++){ 
    if (nameInput == array[i].name) { 
     console.log(array[i].id) 
    } 
} 

小解釋

由於您的提示是一個循環,也是循環的對象數組,只能有在給定的提示點1「正確」的答案 - 無論目前循環的索引(array[i].name)如何。

要多看看我的意思運行當前的代碼和類型jef第一次提示出現時,Steve第二次和Ryan第三時間這種方式得到你的ID,但可能不是你希望的結果。