You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复findUnsubmitted函数的对象数组元素筛选错误问题

问题诊断

你的findUnsubmitted函数存在多处逻辑错误,导致结果不符合预期:

  • 引用赋值污染原数组:const unsubmitted = names; 直接复用了names数组的引用,后续修改会影响原输入数组,应该创建数组副本。
  • 循环逻辑完全错误:
    • 遍历names索引时用date[i]获取提交记录,但date是过滤后的提交数组,长度和names不一致,多数情况会取到undefined。
    • 判断条件student == names.studentName完全无效:names是数组,不存在studentName属性,该条件永远为false。
    • return unsubmitted写在循环内部,导致循环仅执行一次就直接返回,未完成遍历逻辑。
  • 操作对象错误:你修改的是全局的submissions数组,而非要返回的unsubmitted数组,逻辑完全颠倒。

修正后的代码

const submissions = [
    {
        quizName: "Quiz 1",
        quizModule: "Math",
        quizScore: 100,
        studentId: 001,
        studentName: "Kevin",
        submissionDate: "March 24, 2022"
    },
    {
        quizName: "Essay",
        quizModule: "English",
        quizScore: 0,
        studentId: 023,
        studentName: "Nivek",
        submissionDate: "April 1, 2022"
    },
    {
        quizName: "Quiz 2",
        quizModule: "Science",
        quizScore: 71.59485,
        studentId:023,
        studentName: "John",
        submissionDate: "May 24, 2022"
    }
]

const filterByDate = (particularDate, submission) => {
    return submission.filter((sub) => sub.submissionDate === particularDate)
}

const findUnsubmitted = (particularDate, names, submission) => {
    // 提取目标日期提交过测验的学生姓名集合
    const submittedStudents = filterByDate(particularDate, submission)
        .map(sub => sub.studentName);
    // 过滤出未提交的学生
    return names.filter(name => !submittedStudents.includes(name));
}

console.log(findUnsubmitted('April 1, 2022', ['Kevin', 'Nivek', 'John'], submissions));
// 输出: ['Kevin', 'John']

代码说明

  1. 获取已提交学生集合:先用filterByDate筛选目标日期的提交记录,再通过map提取学生姓名,形成已提交名单。
  2. 过滤未提交学生:用filter遍历输入的names数组,保留不在已提交名单中的姓名,直接返回结果。
  3. 避免原数组污染:全程未修改输入的names数组,返回全新数组,符合纯函数特性,同时满足无符合条件学生时返回空数组的需求。

内容的提问来源于stack exchange,提问作者keoe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 06:51:18