【问题标题】:Changing for loop to use forEach in javascript将 for 循环更改为在 javascript 中使用 forEach
【发布时间】:2018-07-25 00:54:33
【问题描述】:

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

【问题讨论】:

    标签: javascript for-loop foreach


    【解决方案1】:

    您只需将每个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);
      }
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多