如何从函数的对象数组中删除项目?

问题描述 投票:0回答:2

1.给定一个提交对象数组,当我向 findUnsubscribed 函数提供日期、学生姓名数组和提交对象数组时,我会返回一个尚未完成任何测验的学生姓名数组那个日期。

  1. 鉴于 findUnsubscribed 功能未找到任何学生姓名,我返回一个空数组。

当我 console.log 我的 findUnsubscribed 函数时,我只是返回: [ 'Kevin', 'Nivek', 'John' ] ...在这种情况下,我应该只返回数组中的 Kevin 和 John ...

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 date = filterByDate(particularDate, submission);
    const unsubmitted = names;
    for(let i = names.length - 1; i >=0; i--) {
        const student = date[i];
        if(student == names.studentName){
            submissions.splice(i, 1);
        }
        return unsubmitted;
        }
}

console.log(findUnsubmitted('April 1, 2022', ['Kevin', 'Nivek', 'John'], submissions));
javascript arrays arraylist arrayobject array-splice
2个回答
0
投票

如果您只想返回当天未完成任何测验的学生姓名数组。别把事情搞复杂了

在函数中:

findUnsubmitted
不需要使用
names
变量。


更改函数中的代码

filterByDate
,例如:

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

和功能

findUnsubmitted
:

const findUnsubmitted = (particularDate, submission) => {
      const date = filterByDate(particularDate, submission);
      if (!date) return [];
      return date.map(item => item.studentName);
}

希望对您有帮助。


0
投票

您的代码中的问题是条件

if(student == names.studentName)
不正确。
names
是一个数组,您应该与
names[i]
而不是
names.studentName
进行比较。另外,您应该使用
===
来实现严格相等。

您正在循环内返回

unsubmitted
,这意味着循环将在第一次迭代后终止,并返回重新提交到循环外

<script>
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 date = filterByDate(particularDate, submission);
    const unsubmitted = [];

    for (let i = 0; i < names.length; i++) {
        const studentName = names[i];

        // Check if the student has a submission on the given date
        const submitted = date.some(sub => sub.studentName === studentName);

        // If not submitted, add to unsubmitted array
        if (!submitted) {
            unsubmitted.push(studentName);
        }
    }

    return unsubmitted;
}

console.log(findUnsubmitted('April 1, 2022', ['Kevin', 'Nivek', 'John'], submissions));
</script>
© www.soinside.com 2019 - 2024. All rights reserved.