目前只想到四种类型的思路
第一种是用es6的Set方法或者filter方法
第二种是拿出当前项和后面的内容比较 includes indexOf都行 这里注意点就是用i--的话可以避免数组塌陷 i > 0 因为最后一个已经没有比较价值了
第三种那一个对象把属性存起来,然后判断当前项是否存在对象中
第四种是邻项对比,先排序,然后加标识符最后使用正则\1和replace来筛选
Set方法去重
let arr = [1,3,6,23,6,6,22,18,8,3,1,1]
function filterArr(arr) {
return [...new Set(arr)]
}
console.log(filterArr)
filter方法去重
let arr = [1,3,6,23,6,6,22,18,8,3,1,1]
function filterArr(arr) {
return arr.filter(function (x, index, self) {
return self.indexOf(x) === index;
});
}
console.log(filterArr)
includes方法去重
let arr = [1,3,6,23,6,6,22,18,8,3,1,1]
function filterArr(arr) {
for(let i = arr.length; i > 0; i--) {
let newArr = arr.slice(0, i - 1)
if(newArr.includes(arr[i])) {
arr.splice(i, 1)
}
}
return arr
}
console.log(filterArr)
indexOf方法去重
let arr = [1,3,6,23,6,6,22,18,8,3,1,1]
function filterArr(arr) {
for(let i = arr.length; i > 0; i--) {
let newArr = arr.slice(0, i - 1)
if(newArr.join().indexOf(arr[i]) > -1) {
arr.splice(i, 1)
}
}
return arr
}
console.log(filterArr)
创建对象属性来存值
let arr = [1,3,6,23,6,6,22,18,8,3,1,1]
function filterArr(arr) {
let json = {}
for(let i = arr.length; i >= 0; i--) {
if(json[arr[i]]) {
arr.splice(i, 1)
}else {
json[arr[i]] = arr[i]
}
}
return arr
}
console.log(filterArr)
创建对象属性来存值
let arr = [1,3,6,23,6,6,22,18,8,3,1,1]
function filterArr(arr) {
arr = arr.sort((a, b)=> {return a - b})
let reg = /(\d+,)\1*/g
let newArr = []
arr = arr.join() + ","
arr.replace(reg, function(value, $1){
newArr.push(parseFloat($1))
})
return newArr
}
console.log(filterArr)
目前想到的就这儿多了,欢迎各位科普
网友评论