Javascript 如果对象包含某些内容,则删除所有数组元素

Javascript 如果对象包含某些内容,则删除所有数组元素,javascript,arrays,ecmascript-6,filter,Javascript,Arrays,Ecmascript 6,Filter,我得到了一个物体阵列 出口接口课程{ id:字符串; 学生:用户[]; 颜色:字符串; } 导出接口用户{ id:字符串; 名称:字符串; //... } 我需要删除课程数组的所有元素,如果他内部的学生数组包含特定id 我试图做一些类似的事情,但我不明白我应该在过滤器内部做什么 const deleteCourseWhereImIn=课程:课程[]=>{ 常数myid=1111 返回课程。filteritem:Course=> //[...] }; 例如: 输入: 常数课程=[ { id:JSL

我得到了一个物体阵列

出口接口课程{ id:字符串; 学生:用户[]; 颜色:字符串; } 导出接口用户{ id:字符串; 名称:字符串; //... } 我需要删除课程数组的所有元素,如果他内部的学生数组包含特定id

我试图做一些类似的事情,但我不明白我应该在过滤器内部做什么

const deleteCourseWhereImIn=课程:课程[]=>{ 常数myid=1111 返回课程。filteritem:Course=> //[...] }; 例如:

输入:

常数课程=[ { id:JSLKLDK, 学生:[ { id:1111, 姓名:约翰 }, { 身份证号码:2222, 姓名:罗纳德 }, { id:3333, 姓名:蒂姆 }, ], 颜色:f01000, }, { id:5JLDKLD, 学生:[ { 身份证号码:2222, 姓名:罗纳德 }, { id:1111, 姓名:约翰 }, ], 颜色:511131, }, { id:PDLFMLZ, 学生:[ { 身份证号码:2222, 姓名:罗纳德 }, ], 颜色:ffffff, }, ] 我的身份证是1111

输出应为:

常数课程=[ { id:PDLFMLZ, 学生:[ { 身份证号码:2222, 姓名:罗纳德 }, ], 颜色:ffffff, }, ]
因为我是john,不在本课程中。

最好使用reduce生成新数组并将其分配给课程

让课程=[ { id:JSLKLDK, 学生:[ { id:1111, 姓名:约翰 }, { 身份证号码:2222, 姓名:罗纳德 }, { id:3333, 姓名:蒂姆 }, ], 颜色:f01000, }, { id:5JLDKLD, 学生:[ { 身份证号码:2222, 姓名:罗纳德 }, { id:1111, 姓名:约翰 }, ], 颜色:511131, }, { id:PDLFMLZ, 学生:[ { 身份证号码:2222, 姓名:罗纳德 }, ], 颜色:ffffff, }, ] courses=courses.reducearr,c=>{ 如果!c.student.somes=>s.id=='1111'{ arr.pushc; } 返回arr },[]
控制台。日志课程 更好地使用reduce生成新数组并将其分配给Course

让课程=[ { id:JSLKLDK, 学生:[ { id:1111, 姓名:约翰 }, { 身份证号码:2222, 姓名:罗纳德 }, { id:3333, 姓名:蒂姆 }, ], 颜色:f01000, }, { id:5JLDKLD, 学生:[ { 身份证号码:2222, 姓名:罗纳德 }, { id:1111, 姓名:约翰 }, ], 颜色:511131, }, { id:PDLFMLZ, 学生:[ { 身份证号码:2222, 姓名:罗纳德 }, ], 颜色:ffffff, }, ] courses=courses.reducearr,c=>{ 如果!c.student.somes=>s.id=='1111'{ arr.pushc; } 返回arr },[] 控制台。日志课程 使用过滤器和每个:

常数myID=1111; 常数课程=[ { id:JSLKLDK, 学生:[ { id:1111, 姓名:约翰 }, { 身份证号码:2222, 姓名:罗纳德 }, { id:3333, 姓名:蒂姆 }, ], 颜色:f01000, }, { id:5JLDKLD, 学生:[ { 身份证号码:2222, 姓名:罗纳德 }, { id:1111, 姓名:约翰 }, ], 颜色:511131, }, { id:PDLFMLZ, 学生:[ { 身份证号码:2222, 姓名:罗纳德 }, ], 颜色:ffffff, }, ] const filtered=courses.filterc=>c.student.everys=>s.id!=粘虫 console.logfiltered 使用过滤器和每个:

常数myID=1111; 常数课程=[ { id:JSLKLDK, 学生:[ { id:1111, 姓名:约翰 }, { 身份证号码:2222, 姓名:罗纳德 }, { id:3333, 姓名:蒂姆 }, ], 颜色:f01000, }, { id:5JLDKLD, 学生:[ { 身份证号码:2222, 姓名:罗纳德 }, { id:1111, 姓名:约翰 }, ], 颜色:511131, }, { id:PDLFMLZ, 学生:[ { 身份证号码:2222, 姓名:罗纳德 }, ], 颜色:ffffff, }, ] const filtered=courses.filterc=>c.student.everys=>s.id!=粘虫 console.logfiltered 使用过滤器和findIndex:

下面是一个详细的版本,可以更好地说明正在发生的事情:

const deleteCourseWhereImIn = (courses: Course[]) => {
    const myid = "1111";

    const filteredCourses = courses.filter(item: Course => {
        const index = item.student.findIndex(user: User => {
             return user.id == myid
        });

        // The method findIndex() will return -1 if the value you search for does not appear in the array.
        return index === -1;
    });

    return filteredCourses;
};
使用过滤器和findIndex:

下面是一个详细的版本,可以更好地说明正在发生的事情:

const deleteCourseWhereImIn = (courses: Course[]) => {
    const myid = "1111";

    const filteredCourses = courses.filter(item: Course => {
        const index = item.student.findIndex(user: User => {
             return user.id == myid
        });

        // The method findIndex() will return -1 if the value you search for does not appear in the array.
        return index === -1;
    });

    return filteredCourses;
};

只需使用javascript的功能特性

const courses=[…您的课程…] 常数idToCheck=1111 让newCourses=courses.filterx=> x、 student.findIndexy=>y.id==idToCheck==-1
只需使用javascript的功能特性

const courses=[…您的课程…] 常数idToCheck=1111 让newCourses=courses.filterx=> x、 student.findIndexy=>y.id==idToCheck==-1
您可以使用filter和一些工具筛选条件id为1111的课程。 在您的描述中,您提到要删除您所在的课程

为此,您可以在函数deleteCourseWhereImIn中使用此筛选器,并将其返回的内容分配给课程[]

让课程=[ { id:JSLKLDK, 学生:[ { id:1111, 姓名:约翰 }, { 身份证号码:2222, 姓名:罗纳德 }, { id:3333, 姓名:蒂姆 }, ], 颜色:f01000, }, { id:5JLDKLD, 学生:[ { 身份证号码:2222, 姓名:罗纳德 }, { id:1111, 姓名:约翰 }, ], 颜色:511131, }, { id:PDLFMLZ, 学生:[ { 身份证号码:2222, 姓名:罗纳德 }, ], 颜色:ffffff, }, ] 课程=课程。筛选课程=>{ return!course.student.somestudent=>student.id==1111; };
控制台。日志课程 您可以使用filter和一些工具筛选条件id为1111的课程。 在您的描述中,您提到要删除您所在的课程

为此,您可以在函数deleteCourseWhereImIn中使用此筛选器,并将其返回的内容分配给课程[]

让课程=[ { id:JSLKLDK, 学生:[ { id:1111, 姓名:约翰 }, { 身份证号码:2222, 姓名:罗纳德 }, { id:3333, 姓名:蒂姆 }, ], 颜色:f01000, }, { id:5JLDKLD, 学生:[ { 身份证号码:2222, 姓名:罗纳德 }, { id:1111, 姓名:约翰 }, ], 颜色:511131, }, { id:PDLFMLZ, 学生:[ { 身份证号码:2222, 姓名:罗纳德 }, ], 颜色:ffffff, }, ] 课程=课程。筛选课程=>{ return!course.student.somestudent=>student.id==1111; }; 控制台。日志课程 请试试这个。 我正在传递函数deleteCourseWhereImIn中的课程数组,然后说我的ID是1111。我正在检查student数组中是否有任何student具有此id,从而使用某种方法返回布尔值。然后根据正确或错误筛选特定课程

    const deleteCourseWhereImIn = (courses: Course[]) => {
      const myId = "1111";
      let filteredCourses = courses.filter(course => {
        let studentArr = course.student;
        let filterdStudent = studentArr.some(student => student.id === myId);
        return !filterdStudent;
        
      });
    
      console.log('Filtered Course', filteredCourses);
    }
    
    deleteCourseWhereImIn(courses);  // calling function 
请试试这个。 我正在传递函数deleteCourseWhereImIn中的课程数组,然后说我的ID是1111。我正在检查student数组中是否有任何student具有此id,从而使用某种方法返回布尔值。然后根据正确或错误筛选特定课程

    const deleteCourseWhereImIn = (courses: Course[]) => {
      const myId = "1111";
      let filteredCourses = courses.filter(course => {
        let studentArr = course.student;
        let filterdStudent = studentArr.some(student => student.id === myId);
        return !filterdStudent;
        
      });
    
      console.log('Filtered Course', filteredCourses);
    }
    
    deleteCourseWhereImIn(courses);  // calling function 

请不要只在答案中发布代码;最好解释一下,这样OP可以学到一些东西。如果你愿意,我会更新答案,如果你能提出建议的话edit@Mitya谢谢你的否决票,我想我以后不会再一起回答问题了。不要太在意了。你的回答没有任何解释,因此完全值得投反对票。你现在添加了一些公认的最低限度的解释,所以我撤回了否决票。你为什么要我编辑?我不能为你或其他任何人解释你的答案。你现在已经这样做了,否决票被撤回,让我们继续。请不要只在答案中发布代码;最好解释一下,这样OP可以学到一些东西。如果你愿意,我会更新答案,如果你能提出建议的话edit@Mitya谢谢你的否决票,我想我不会再一起回答问题了
呃,在将来,不要把它看得太私人。你的回答没有任何解释,因此完全值得投反对票。你现在添加了一些公认的最低限度的解释,所以我撤回了否决票。你为什么要我编辑?我不能为你或其他任何人解释你的答案。你已经这么做了,否决票已经撤回,让我们继续。