方法一:双重 for + splice
function unique(arr) {
for (let i=0; i < arr.length; i++) {
for (let j=i+1; j < arr.length; j++) {
if (arr[i] === arr[j]) {
arr.splice(j, 1)
j--
}
}
}
return arr
}
方法二:indexOf
function unique(arr) {
var uniqueArr = []
for(let i=0; i<arr.length; i++) {
if (uniqueArr.indexOf(arr[i]) === -1) {
uniqueArr.push(arr[i])
}
}
return uniqueArr
}
方法三:includes
function unique(arr) {
var uniqueArr = []
for(let i=0; i<arr.length; i++) {
if (!uniqueArr.includes(arr[i])) {
uniqueArr.push(arr[i])
}
}
return uniqueArr
}
方法四:sort + 快慢指针
function unique(arr) {
arr.sort((a, b) => a - b)
let fast = 1,
slow = 1
while(fast < arr.length) {
if (arr[fast] !== arr[fast - 1]) {
arr[slow++] = arr[fast]
}
++ fast
}
arr.length = slow
return arr
}
方法五:Set
function unique(arr) {
return [...new Set(arr)]
}
方法六:Hash
function unique(arr) {
let map = new Map()
let uniqueArr = new Array()
for (let i=0; i<arr.length; i++) {
if (!map.has(arr[i])) {
map.set(arr[i], true)
uniqueArr.push(arr[i])
}
}
return uniqueArr
}
方法七:filter + indexOf
function unique(arr) {
return arr.filter((item, index, arr) => {
return arr.indexOf(item) === index
})
}
方法八:reduce + includes
function unique(arr) {
return arr.reduce((acc, cur) => {
if (!acc.includes(cur)) {
acc.push(cur)
}
return acc
}, [])
}