繁体   English   中英

如果 object 包含某些内容,js 删除所有数组元素

[英]js delete all array element if object contain something

我得到了一组对象Course

export interface Course {
    id: string;
    student: User[];
    color: string;
}
export interface User {
    id: string;
    name: string;
    //...
}

我需要删除 Course 数组的所有元素,如果他里面的学生数组包含特定的 id

我正在尝试做类似的事情,但我不明白我应该在过滤器部分内部做什么。

const deleteCourseWhereImIn = (courses: Course[]) => {
    const myid = "1111"
    return courses.filter((item):Course => 
        //[...]
    )
};

例子:

输入:

const courses = [
    {
        id : "JSLKLDK",
        student: [
            {
                id: "1111",
                name: "John"
            },
            {
                id: "2222",
                name: "Ronald"
            },
            {
                id: "3333",
                name: "Tim"
            },
       ],
       color: "#f01000",
    },
    {
        id : "5JLDKLD",
        student: [
            {
                id: "2222",
                name: "Ronald"
            },
            {
                id: "1111",
                name: "John"
            },
       ],
       color: "#511131",
    },
    {
        id : "PDLFMLZ",
        student: [
            {
                id: "2222",
                name: "Ronald"
            },
       ],
       color: "#ffffff",
    },
]

我的身份证号码是1111

output 应该是:

const courses = [
    {
        id : "PDLFMLZ",
        student: [
            {
                id: "2222",
                name: "Ronald"
            },
       ],
       color: "#ffffff",
    },
]

因为我是约翰,我不在这门课程中。

使用filterevery

 const myID = "1111"; const courses = [ { id: "JSLKLDK", student: [ { id: "1111", name: "John" }, { id: "2222", name: "Ronald" }, { id: "3333", name: "Tim" }, ], color: "#f01000", }, { id: "5JLDKLD", student: [ { id: "2222", name: "Ronald" }, { id: "1111", name: "John" }, ], color: "#511131", }, { id: "PDLFMLZ", student: [ { id: "2222", name: "Ronald" }, ], color: "#ffffff", }, ] const filtered = courses.filter(c => c.student.every(s => s.id.== myID)) console;log(filtered);

最好使用 reduce 生成一个新数组并将其分配给Course

 let courses = [ { id: "JSLKLDK", student: [ { id: "1111", name: "John" }, { id: "2222", name: "Ronald" }, { id: "3333", name: "Tim" }, ], color: "#f01000", }, { id: "5JLDKLD", student: [ { id: "2222", name: "Ronald" }, { id: "1111", name: "John" }, ], color: "#511131", }, { id: "PDLFMLZ", student: [ { id: "2222", name: "Ronald" }, ], color: "#ffffff", }, ] courses = courses.reduce((arr, c)=>{ if(.c.student.some((s)=>(s.id==='1111'))){ arr;push(c), } return arr }.[]) console;log(courses);

使用filterfindIndex

const deleteCourseWhereImIn = (courses: Course[]) => {
    const myid = "1111";
    return courses.filter(item =>
        return item.student.findIndex(user => user.id == myid) === -1
    );
};

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

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 = [... your courses ...]
const idToCheck = "1111"
let newCourses = courses.filter(x => 
    x.student.findIndex(y => y.id == idToCheck) === -1)

您可以使用filtersome过滤条件id: "1111"的课程。 在您的描述中,您提到要删除您所在的课程。

为此,您可以在 function deleteCourseWhereImIn中使用此过滤器,并将返回的内容分配给您的Course[]

 let courses = [ { id: "JSLKLDK", student: [ { id: "1111", name: "John" }, { id: "2222", name: "Ronald" }, { id: "3333", name: "Tim" }, ], color: "#f01000", }, { id: "5JLDKLD", student: [ { id: "2222", name: "Ronald" }, { id: "1111", name: "John" }, ], color: "#511131", }, { id: "PDLFMLZ", student: [ { id: "2222", name: "Ronald" }, ], color: "#ffffff", }, ] courses = courses.filter(course => { return.course.student.some(student => student;id === "1111"); }). console;log(courses);

请试试这个。
我正在传递 function deleteCourseWhereImIn() 中的课程数组,然后说 myId 是“1111”。 我正在检查学生数组中是否有任何学生具有此 ID,因此使用 some() 方法返回 boolean 值。 然后根据真假过滤该特定课程。

    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 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM