簡體   English   中英

遍歷對象數組

[英]Iterate through an array of Objects

我需要遍歷對象數組,並提示用戶輸入學生的姓名。 如果名稱存在,我需要將學生的數據打印到屏幕上,或者繼續進行迭代,直到用戶鍵入退出為止。

我遇到的問題是,如果鍵入最后一個對象的學生的姓名,則在循環完成之前,不會打印學生的記錄。

請參見下面的代碼:

 var students = [{ name: 'hacene', track: 'Full Stack JavaScript', achievements: 12, points: 1226 }, { name: 'dave', track: 'PHP Development', achievements: 128, points: 14868 }, { name: 'layla', track: 'iOS Development', achievements: 8, points: 901 }, { name: 'mika', track: 'Front-End Development', achievements: 15, points: 1666 }, { name: 'heisenberg', track: 'Blue Meth Manufacturing', achievements: 99, points: 9999 } ]; var student; var records = ''; var search; // Print function to print the content function print(message) { var outputDiv = document.getElementById('output'); outputDiv.innerHTML = message; } // Access each students records in the array / a loop is needed to achieve this for (var i = 0; i < students.length; i++) { student = students[i]; console.log(student); search = prompt('Please enter a student\\'s name to see his records: '); search = search.toLocaleLowerCase(); console.log(search); if (search === student.name) { records += '<h2><strong>Student: ' + student.name + '</strong><h2>'; records += '<p>Track: ' + student.track + '</p>'; records += '<p>Points: ' + student.points + '</p>'; records += '<p>Achievements: ' + student.achievements + '</p>'; break; } else if (search === 'quit') { break; } } // Print the students' name; track, achievments and points print(records); 

我需要的是能夠從第一個提示打印學生的記錄,即使他是列表中的最后一個。

您所做的更像是一個猜謎游戲:“在for循環中找到當前學生的姓名”,我不知道您是否仍然需要答案,但是您可以:

您只需要將提示放在for循環之前。 提示后,您進行循環,如果找到結果,則停止。

 var students = [{ name: 'hacene', track: 'Full Stack JavaScript', achievements: 12, points: 1226 }, { name: 'dave', track: 'PHP Development', achievements: 128, points: 14868 }, { name: 'layla', track: 'iOS Development', achievements: 8, points: 901 }, { name: 'mika', track: 'Front-End Development', achievements: 15, points: 1666 }, { name: 'heisenberg', track: 'Blue Meth Manufacturing', achievements: 99, points: 9999 } ]; var student; var records = ''; var search; // Print function to print the content function print(message) { var outputDiv = document.getElementById('output'); outputDiv.innerHTML = message; } search = prompt('Please enter a student\\'s name to see his records: '); // Access each students records in the array / a loop is needed to achieve this for (var i = 0; i < students.length; i++) { student = students[i]; search = search.toLocaleLowerCase(); if (search === student.name) { records += '<h2><strong>Student: ' + student.name + '</strong><h2>'; records += '<p>Track: ' + student.track + '</p>'; records += '<p>Points: ' + student.points + '</p>'; records += '<p>Achievements: ' + student.achievements + '</p>'; break; } } // Print the students' name; track, achievments and points print(records); 
 <div id="output"></div> 

您可以在循環中添加if語句。

if( search != "quit") {
for (var i = 0; i < students.length; i++) {
  student = students[i];
  search = search.toLocaleLowerCase();

  if (search === student.name) {
    records += '<h2><strong>Student: ' + student.name + '</strong><h2>';
    records += '<p>Track: ' + student.track + '</p>';
    records += '<p>Points: ' + student.points + '</p>';
    records += '<p>Achievements: ' + student.achievements + '</p>';
    break;
  }
}
}

使用它,如果您鍵入quit,則不會進入循環。

即使它不能滿足您的要求,更好的方法還是使用find方法。

 var students = [{ name: 'hacene', track: 'Full Stack JavaScript', achievements: 12, points: 1226 }, { name: 'dave', track: 'PHP Development', achievements: 128, points: 14868 }, { name: 'layla', track: 'iOS Development', achievements: 8, points: 901 }, { name: 'mika', track: 'Front-End Development', achievements: 15, points: 1666 }, { name: 'heisenberg', track: 'Blue Meth Manufacturing', achievements: 99, points: 9999 } ]; var student; var records = ''; var search; // Print function to print the content function print(message) { var outputDiv = document.getElementById('output'); outputDiv.innerHTML = message; } function write(student) { records += '<h2><strong>Student: ' + student.name + '</strong><h2>'; records += '<p>Track: ' + student.track + '</p>'; records += '<p>Points: ' + student.points + '</p>'; records += '<p>Achievements: ' + student.achievements + '</p>'; print(records); } search = prompt('Please enter a student\\'s name to see his records: '); student = students.find((element) => { if (element.name == search) { return true; } }) if (student) { write(student); }; // Print the students' name; track, achievments and points 
 <div id="output"></div> 

我需要遍歷對象數組,並提示用戶輸入學生的姓名。 如果名稱存在,我需要將學生的數據打印到屏幕上,或者繼續進行迭代,直到用戶鍵入退出為止。

您需要重新考慮算法:

get input from user
while user does not enter "quit"
    for each object in list
       if name is the same as input
           output the record
    get input from user

請注意,您需要從用戶那里獲取輸入, 然后遍歷列表以搜索正確的對象。

或者,您可以使用對象而不是列表。 該外部對象將以學生的姓名為鍵,而對象記錄為值。 現在,您可以為用戶輸入的學生姓名建立索引,以直接獲取記錄,而無需搜索列表。

您無需繼續提示學生以提示用戶,而是需要繼續提示用戶,直到他們輸入quit或您有一個匹配項為止。

像這樣:

var quit = false
while(!quit) {
    search = prompt('Please enter a student\'s name to see his records: ');
    search = search.toLocaleLowerCase();

    if (search === 'quit') {
        quit = true;
        continue;
    }

    // search for student here and if match is found then set quit to true
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM