[英]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",
},
]
因为我是约翰,我不在这门课程中。
使用filter
和every
:
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);
使用filter
和findIndex
:
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)
您可以使用filter
和some
过滤条件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.