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

时间:2018-07-25 00:54:33

标签: javascript for-loop foreach

对于我的项目,我有一个学生列表,并且打算使用超基本正则表达式来检查他们的成绩。仅将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循环,该怎么做呢?

2 个答案:

答案 0 :(得分:2)

您只需要将每个students[i]更改为提供给forEach的第一个参数(该参数引用数组中正在迭代的当前项),可能将其称为student:< / p>

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

答案 1 :(得分:1)

我会使用filter而不是forEach,是的,它在数组上循环了两次,但是代码更易于阅读和理解

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