//第一种
// 无需思考,我们可以得到 O(n^2) 复杂度的解法。
// 定义一个变量数组 res 保存结果,遍历需要去重的数组,
// 如果该元素已经存在在 res 中了,则说明是重复的元素,如果没有,则放入 res 中。
// function fun(params) {
// let res = []
// for (let index = 0; index < params.length; index++) {
// for (var j = 0; j < res.length; j++) {
// if (res[j] === params[index]) {
// break
// }
// }
// if (j === res.length) {
// res.push(params[j])
// }
// }
// console.log(res)
// }
// 加indexOf
// function fun(params) {
// let res = []
// for (let index = 0; index < params.length; index++) {
// res.indexOf(params[index]) == -1 && res.push(params[index])
// }
// console.log(res)
// }
//加filter
// function fun(params) {
// let res = []
// params.filter((item) => {
// res.indexOf(item) == -1 && res.push(item)
// })
// console.log(res)
// }
// function fun(params) {
// let res = params.filter((item, index, arr) => {
// return params.indexOf(item) === index
// })
// console.log(res)
// }
//第二种
// 法一是将原数组中的元素和结果数组中的元素一一比较,
// 我们可以换个思路,将原数组中重复元素的最后一个元素放入结果数组中。
// function fun(params) {
// let res = []
// for (var index = 0; index < params.length; index++) {
// for (var j = index + 1; j < params.length; j++) {
// if (params[index] === params[j]) {
// j = ++index
// }
// }
// res.push(params[index])
// }
// console.log(res)
// }
//第三种es6
// function fun(params) {
// return Array.from(new Set(params))
// }
//第四种sort
// 将数组用 sort 排序后,理论上相同的元素会被放在相邻的位置,
// 那么比较前后位置的元素就可以了。
// 问题又来了,1 和 "1" 会被排在一起,不同的 Object 会被排在一起,
// 因为它们 toString() 的结果相同,所以会出现错误
// function fun(params) {
// return params.sort().filter((item, index, arr) => {
// return !index || item != arr[index - 1]
// })
// }
//第五种
function fun(arr) {
let result = []
let obj = {}
for (let i of arr) {
if (!obj[i]) {
result.push(i)
obj[i] = 1
}
}
return result
}
// fun([1, 2, 3, 32, 31, 2, 2, 2, 1, 1, 1, 3, 3, 3])
console.log(fun([1, 2, 3, 32, 31, 2, 2, 2, 1, 1, 1, 3, 3, 3]))
数组去重
最新推荐文章于 2024-07-14 15:54:59 发布