学生答案对比正确答案获取得分【一天一个算法陶冶情操 | 算法练习生第3天】

js 复制代码
/**
 * 写一个函数,参数1为正确答案的数组, 参数2为学生答案的数组
 * 两个数组长度相同,要求该函数返回学生的得分(正确答案+4, 错误答案-1, 空白答案+0(y以空字符串表示))
 * 如果分数<0 则返回0
 */

function checkTest(param1, param2) {
  const reducer = (a, b, index) => {
    if (b === '') {
      return a
    }
    if (b === param1[index]) {
      return (a += 4)
    }
    return --a
  }
  const score = param2.reduce(reducer, 0)
  return score < 0 ? 0 : score
}
/**
 * 简析:
 * 通过reduce来完成累加, 在reduce的回调函数中来对分数加减进行判断,
 * 通过参数b(当前value)来进行相关判断, 需要注意的是错误答案, 返回的结果是--a,
 * 因为reduce是把回调函数的结果作为第一个参数传递到第二次的累加中,
 * 所以如果是a--的话, 其实返回的还是结果a, 而不是-1后的结果
 */

function checkTest2(param1, param2) {
  let scope = 0
  for (let i = 0; i < param1.length; i++) {
    if (param1[i] === param2[i]) {
      scope += 4
    } else if (param2[i] === '') {
      scope += 0
    } else {
      scope--
    }
  }
  return scope < 0 ? 0 : scope
}
/**
 * 简析
 * 这个就是一个简单的遍历 后面scope--就可以正常用了, 因为函数时基于顶层的scope做的处理, 执行完成后会减掉
 */

// 测试
console.log(checkTest([1, 5, 8, 3, 2], [1, 3, 8, 3, '']))
console.log(checkTest2([1, 5, 8, 3, 2], [1, 3, 8, 3, '']))
相关推荐
米丘4 分钟前
了解 Javascript 模块化,更好地掌握 Vite 、Webpack、Rollup 等打包工具
前端
Heo6 分钟前
深入 React19 Diff 算法
前端·javascript·面试
滕青山7 分钟前
个人所得税计算器 在线工具核心JS实现
前端·javascript·vue.js
小怪点点8 分钟前
手写promise
前端·promise
国思RDIF框架16 分钟前
RDIFramework.NET Web 敏捷开发框架 V6.3 发布 (.NET8+、Framework 双引擎)
前端
颜酱17 分钟前
从0到1实现LFU缓存:思路拆解+代码落地
javascript·后端·算法
Mintopia17 分钟前
如何在有限的时间里,活出几倍的人生
前端
炫饭第一名18 分钟前
速通Canvas指北🦮——变形、渐变与阴影篇
前端·javascript·程序员
Neptune119 分钟前
让我带你迅速吃透React组件通信:从入门到精通(上篇)
前端·javascript
小星哥哥19 分钟前
JavaScript 动态导入 (Dynamic Imports)
javascript