需要去重的数组对象:
let arrList = [
{ name : "挪威的森林" , id : 1 } ,
{ name : "Last Dance" , id : 1 } ,
{ name : "突然的自我" , id : 2 } ,
{ name : "浪人情歌" , id : 3 } ,
{ name : "海阔天空" , id : 2 } ,
{ name : "光辉岁月" , id : 4 }
] ;
方法一:使用 Map()
has方法可以判断Map对象中是否存在指定元素,有则返回true,否则返回false
set方法可以向Map对象添加新元素 map.set(key, value)
values方法可以返回Map对象值的遍历器对象
let map = new Map ( ) ;
for ( let item of arrList) {
if ( ! map. has ( item. id) ) {
map. set ( item. id, item) ;
} ;
}
arr = [ ... map. values ( ) ] ;
console. log ( arr) ;
const map = new Map ( ) ;
const newArr = arrList . filter ( v => ! map. has ( v. id) && map. set ( v. id, 1 ) ) ;
console. log ( newArr) ;
方法二: 使用 .filter() 和 .findIndex() 相结合的方法
使用 filter() 方法过滤掉重复的元素
使用 findIndex() 方法判断对象是否重复
const newArr = arrList. filter ( ( item, index ) => arrList. findIndex ( i => i. id === item. id) === index) ;
方法三:使用 .forEach() 和 .some() 相结合的方法
使用 forEach() 方法遍历数组
使用 some() 方法判断是否重复
const newArr = [ ] ;
arrList. forEach ( item => {
if ( ! newArr. some ( i => i. id === item. id) ) {
newArr. push ( item) ;
}
} ) ;
方法四:使用indexOf()
定义一个数组存储id的值,然后逐个比较,把id值重复的对象删除即可
let newArr = [ ] ;
for ( let i = 0 ; i < arrList. length; i++ ) {
if ( newArr. indexOf ( arrList[ i] . id) == - 1 ) {
newArr. push ( arrList[ i] . id) ;
} else {
arrList. splice ( i, 1 ) ;
i-- ;
} ;
} ;
console. log ( arrList) ;
方法五:使用双层for循环
两两比较,如果后一个对象的id值和前一个对象的id值相等,就把后面的对象删除
for ( let i = 0 ; i < arrList. length; i++ ) {
for ( let j = i + 1 ; j < arrList. length; j++ ) {
if ( arrList[ i] . id == arrList[ j] . id) {
arrList. splice ( j, 1 ) ;
j-- ;
} ;
} ;
} ;
console. log ( arrList) ;
方法六:使用 For const of 和 find 结合
创建一个空的唯一数组来存储唯一对象
循环遍历数组中的对象。对于每个对象,如果它不是重复的,则将其添加到唯一数组。否则,忽略它
const newArr = [ ] ;
for ( const item of arrList) {
const isRepeat = newArr. find ( ( obj ) => obj. id === item. id) ;
if ( ! isRepeat) {
newArr. push ( item) ;
}
}