簡體   English   中英

在javascript中更改for循環以使用forEach

[英]Changing for loop to use forEach in javascript

對於我的項目,我有一個學生列表,我打算使用超級基本正則表達式來檢查他們的成績。 A和B學生將被添加到單獨的陣列中,僅適用於那些學生。 這樣做的代碼如下:

const aTest = new RegExp(/(A)/i);
const bTest =  new RegExp(/(B)/i);
const aStudents = [];
const bStudents = [];
for (var i = 0; i < students.length; i++) {
  if (aTest.test(students[i].grade)) {
    aStudents.push(students[i]);
  }
  if (bTest.test(students[i].grade)) {
    bStudents.push(students[i]);
  }
}

但是,如果我使用forEach而不是for循環,我應該怎么做呢?

你只需要將每個students[i]更改為提供給forEach的第一個參數(它引用在數組中迭代的當前項目),可能稱之為student

students.forEach(student => {
  if (aTest.test(student.grade)) {
    aStudents.push(student);
  } else if (bTest.test(student.grade)) {
    bStudents.push(student);
  }
});

但是如果你已經有一個正則表達式文字,則不需要new RegExp - 只需將正則表達式文字指定給變量即可。 此外,如果您只是需要test ,則不需要捕獲的組:

const aTest = /A/i;
const bTest = /B/i;

或者,您可以完全避免使用正則表達式並使用(ES6) .includes

  if (student.grade.includes('A')) {
    aStudents.push(student);
  } else if (student.grade.includes('B')) {
    bStudents.push(student);
  }

我會使用filter而不是forEach ,是的,它會在數組上循環兩次,但代碼更清晰,可以閱讀和理解

const aStudents = students.filter(student => student.grade.match(/A/i));
const bStudents = students.filter(student => student.grade.match(/B/i));

暫無
暫無

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

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