首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >更改for循环以在javascript中使用forEach

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

Stack Overflow用户
提问于 2018-07-25 08:54:33
回答 2查看 44关注 0票数 1

对于我的项目,我有一个学生列表,并打算使用超级基本的正则表达式来检查他们的成绩。A和B学生将被添加到单独的数组中,仅用于这些学生。执行此操作的代码如下:

代码语言:javascript
复制
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循环,我应该如何着手呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-25 08:56:59

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

代码语言:javascript
复制
students.forEach(student => {
  if (aTest.test(student.grade)) {
    aStudents.push(student);
  } else if (bTest.test(student.grade)) {
    bStudents.push(student);
  }
});

但是如果你已经有了正则表达式文字,就不需要new RegExp了--只需将正则表达式文字赋值给变量即可。此外,如果您只需要test,则不需要捕获组

代码语言:javascript
复制
const aTest = /A/i;
const bTest = /B/i;

或者,您可以完全避免使用正则表达式,而改用(ES6) .includes

代码语言:javascript
复制
  if (student.grade.includes('A')) {
    aStudents.push(student);
  } else if (student.grade.includes('B')) {
    bStudents.push(student);
  }
票数 2
EN

Stack Overflow用户

发布于 2018-07-25 09:08:37

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

代码语言:javascript
复制
const aStudents = students.filter(student => student.grade.match(/A/i));
const bStudents = students.filter(student => student.grade.match(/B/i));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51509445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档