前言: 最近在准备面试, 找工作的问题, 听之前的同学说关于数组去重的实现问的比较多,特写此播客记录.
//先定义一个数组
let arr = [
{id: 1, content: 'nihao'},
{id: 2, content: 'nihao'},
{id: 4, content: 'nihao'},
{id: 5, content: 'nihao'},
{id: 2, content: 'nihao'},
{id: 3, content: 'nihao'},
{id: 1, content: 'nihao'}
]
function setArr1(arr) {
const newArr = []
// 第一种方法
// arr.forEach(item => {
// const i = newArr.findIndex(it => it.id === item.id)
// if (i === -1) newArr.push(item)
// })
// 第二种方法
// arr.forEach(item => {
// if (!newArr.some(ele => ele.id === item.id)) newArr.push(item)
// })
// 第三种方法
arr.forEach(item => {
const obj = newArr.find(it => it.id === item.id)
if (!obj) newArr.push(item)
})
return newArr.sort((a,b) => {
return a.id - b.id
})
}
console.log(setArr1(arr))
上面是对象的去重 普通数组的去重
let arr3 = [1, 2, 3, 4, 7, 3, 4, 5]
// 简单数据类型去重
function SetArr(arr) {
const set = new Set(arr)
const newArr = [...set] // 1
const arr2 = Array.from(set) // 2
const arr3 = []
arr.forEach(item => {
if (!arr3.includes(item)) arr3.push(item)
}) // 3
return arr3.sort((a,b) => {
return a - b
}) // 做一个排序
}
console.log(SetArr(arr3))
更新一个数组的排序, 之前遇到的是基于字符串ASCII的一个排序
let arr = [
{code: 'A', content: 'nihao'},
{code: 'C', content: 'nihao'},
{code: 'B', content: 'nihao'}
]
function mySort (arr) {
arr.sort((a,b) => {
return (a.code.charCodeAt() - b.code.charCodeAt())
})
return arr
}
let arr1 = mySort(arr)