一、原始类型
1.利用ES6的新增数据结构Set
let arr = [1,2,2,2,3,4,4,3,5,5];
arr = Array.from(new Set(arr));
写成函数:
function removeDuplicate(arr){
return [...new Set(arr)];
}
2.利用Array.prototype.includes()
let arr = [1,2,2,2,3,4,4,3,5,5], newArr=[];
arr.forEach(item => {
if(!newArr.includes(item)){
newArr.push(item);
}
})
3.利用Array.prototype.indexOf()
let arr = [1,2,2,2,3,4,4,3,5,5], newArr=[];
arr.forEach(item => {
if(newArr.indexOf(item) === -1){
newArr.push(item);
}
})
二、引用类型——对象
业务开发中遇到的问题:添加课程安排需要用到课程信息,但课程信息不能从 课程表中直接获取,只能先拿到课程安排,再从课程安排中取出课程信息供添加、修改课程安排时使用。从课程安排中取出的课程如下。
courses = [
{
CourseID:1,
CourseName:'英语课'
},
{
CourseID:2,
CourseName:'英语课'
},
{
CourseID:3,
CourseName:'数学课'
},
{
CourseID:4,
CourseName:'英语课'
},
{
CourseID:5,
CourseName:'语文课'
},
]
方法1:使用 Set + Array.from + JSON.stringify + JSON.parse
let courses = courseArrangment.map(item => {
return JSON.stringify({
CourseID: item.CourseID,
CourseName: item.CourseName
});
});
courses = Array.from(new Set(courses));
courses = courses.map(item => {
return JSON.parse(item);
});
先用courseArrangment.map()从课程安排取出课程,由于直接使用Set不能去掉重复的课程,所以使用JSON.stringify()将课程转成JSON字符串,再利用Set则可去掉重复的课程,最后用JSON.parse()把课程转成JSON对象。
方法2:使用 Array的 filter + findIndex 实现
let courses = courseArrangment.map(item => ({
CourseID: item.CourseID,
CourseName: item.CourseName
})).filter((item, index, self) => {
return self.findIndex(i => item.CourseID === i.CourseID) === index;
});
先用courseArrangment.map()从课程安排取出课程,再使用filter()去掉重复的课程。