整理了一下我最常用的三种数组去重方法,话不多说,直接上代码
// 第一种方法 indexOf
function test(arr) {
let newArr = []
for(let i=0;i<arr.length;i++){
// 如果该元素在数组中找不到 就会返回-1
if(newArr.indexOf(arr[i])===-1){
newArr.push(arr[i])
}
}
return newArr
}
const arr = test([1,1,1,2,1,3,3,2])
console.log(arr);
// 第二种方法 splice
function newArr(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)
// 注意删掉一个数组元素之后,数组长度会-1,
// 后面值的索引会-1,所以j也需要-1,不然循环会跳过一个元素
j--
}
}
}
return arr
}
const arr = newArr([1,1,1,2,1,3,3,2])
console.log(arr);
// 第三种方法 ES6中的Set数据结构,类似于数组,但是成员的值是唯一的,不能重复
function get(arr) {
// Set本身是个构造函数,用来生成Set数据结构
let set =new Set(arr)
console.log(set);
// Set数据结构毕竟不是数组,需要用Array.from()转化为数组
return Array.from(set)
}
const arr = get([1,1,1,2,1,3,3,2])
console.log(arr);
不管是逻辑上,还是代码长度上,ES6的Set数据结构数组去重方法都是最简洁明了的,推荐使用
<script>
var arr = [1,1,1,3,2,5,4,3,5]
const arr1 = arr.reduce((newArr,item)=>{
newArr.includes(item)?newArr:newArr.push(item)
return newArr
},[])
console.log(arr1);
</script>
上一篇
下一篇