【问题标题】:How can I use a For-Loop to return a new array from an old one如何使用 For-Loop 从旧数组返回新数组
【发布时间】:2022-01-13 13:19:29
【问题描述】:

我有一组来自两个不同评分系统的学生。

一级评分系统 一种评分系统被定义为从 1 到 5 的成绩,其中 3 及以上意味着您通过了课程。

二级评分系统 另一个等级系统有以下等级 A、A-、B、B-、C、C-,其中 A 是最高等级,C 是最低及格等级。

任务 给定以下代表所有学生及其成绩的数组 allStudents,我正在尝试构建一个新数组 studentsWhoPass,其中包含所有通过的学生。

让所有学生 = [ '一种', 'B-', 1、 4、 5、 2 ]

让 studentsWhoPass = [];

我已经尝试过什么

let allStudents = [
    'A',
    'B-',
    1,
    4,
    5,
    2
  ]
  
  let studentsWhoPass = [];

  for (let i = 0; i < allStudents.length; i++) {
    if (allStudents >= 'A' && allStudents > 3) {
        return studentsWhoPass.push(allStudents);
    }
  }

任何帮助将不胜感激。

【问题讨论】:

  • 此外,您正在对数组本身 (allStudents) 进行操作,而不是循环内的当前元素 (allStudents[i])。

标签: javascript arrays loops operators


【解决方案1】:

let allStudents = [
    'A',
    'B-',
    1,
    4,
    5,
    2
  ]
  
  let studentsWhoPass = [];

  for (let i = 0; i < allStudents.length; i++) {
    if (allStudents[i] == 'A' || allStudents[i] == 'B' || allStudents[i] == 'C' || allStudents[i] == 'A-' || allStudents[i] == 'B-' || allStudents[i] > 3) {
        studentsWhoPass.push(allStudents[i]);
    }
  }
console.log(studentsWhoPass);

注意:-

  • return 语句只能存在于函数之外的任何函数中,您可以只更新并将值推送到数组中
  • 您试图将整个数组推入此处,我们将只推入数组中的元素,例如studentsWhoPass.push(allStudents[i]);
  • 在 if 语句中,您正在检查整个数组是否符合特定条件,但您必须检查与上述示例相同的元素
  • 为了检查字符,我们可以使用 ASCII 码进行检查,但它可能会变得混乱,为简单起见,我们正在检查单个字母
  • 此外,我们使用 ||(or) 运算符代替 &amp;&amp;(and) 运算符,这样每个元素的每个条件都不必为真,但至少一个条件应该为真

我想这会解决你的问题,谢谢!

【讨论】:

  • 哇!完美的答案。我迫不及待地想达到这个水平。该代码有效。非常感谢,伙计。
  • 非常感谢您的赞赏!
【解决方案2】:

我建议为每个年级及其同等分数创建一个地图,然后使用Array.filter() 轻松过滤同等分数为 3 或以上的学生

let allStudents = [ 'A', 'B-', 1, 4, 5, 2, 'C-' ]
  
// One can customize as necessary..
let gradeMap = { 'A': 7, 'A-': 6, 'B': 5, 'B-': 4, 'C': 3, 'C-': 2};

const passingScore = 3;

function studentPassed(input) {
    return (gradeMap[input] || input) >= passingScore;
}

let studentsWhoPass = allStudents.filter(studentPassed)
console.log('Passing students:', studentsWhoPass)
    
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

    【解决方案3】:

    几个问题

    • 在循环中返回将停止循环。循环中不需要 它在地图或过滤器中是必需的,并且不允许在函数之外

    • 您需要使用 [i] 访问该项目

    • 你有字母和数字的混合体。你需要分别对待它们

    • "B..." is > "A..." 所以我们需要测试实际的字符串

    这里我用 isNaN(不是数字)测试字母

    它传递所有字母 > C- 和所有数字 >= 3

    const allStudents = [ 'A','A-','B-',1,4,5,2 ];
    
    const getPassingStudents = () => allStudents
      .filter(student => {
        if (isNaN(student)) 
          return "ABC".includes(student.slice(0,1)) && student != "C-";
        return student > 3;
    });    
        
    
    console.log(
      getPassingStudents()
    )

    【讨论】:

    • 我非常感谢。这是经典。所有反馈都已适当记录。
    • @davidodolofin 请查看新代码。我更新为更合乎逻辑它通过所有字母> C-和所有数字> = 3
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 2012-04-01
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多