数组去重的方式有哪些?
双重for()循环
var arr = [1, 2, 3, 4, 5, 6, 4, 3, 8, 1] // 数组去重: // 方法1: 双重for 循环 function newArrFn(arr) { // 创建一个新的空数组 let newArr = [] for (let i = 0; i < arr.length; i++) { // 设置一个开关,如果是true,就存进去,不是就不存 let flag = true for (let j = 0; j < newArr.length; j++) { // 原数组和新数组作比较,如果一致,开关变为 false arr[i] === newArr[j] ? flag = false : flag }; flag ? newArr.push(arr[i]) : newArr }; return newArr } console.log(newArrFn(arr));// [1, 2, 3, 4, 5, 6, 8]
for()循环+indexof()
indexof()特性就是查找数组中是否有相同元素,如果有就返回其索引(及下标),如果没有就返回-1
var arr = [1, 2, 3, 4, 5, 6, 4, 3, 8, 1] // 数组去重: // 方法2: for + indexof function newArrFn(arr) { let newArr = [] for (let i = 0; i < arr.length; i++) { newArr.indexOf(arr[i]) === -1 ? newArr.push(arr[i]) : newArr }; return newArr } console.log(newArrFn(arr));//[1, 2, 3, 4, 5, 6, 8]
for()+sort()
先将原数组sort()排序,然后for()循环比较相邻数组,如果不同就push
var arr = [1, 2, 3,4 ,5,6, 4, 3, 8, 1] // 数组去重: // 方法3: for + sort function newArrFn (arr) { arr = arr.sort() let newArr = [] for(let i = 0;i<arr.length;i++){ arr[i] === arr[i-1] ? newArr : newArr.push(arr[i]) }; return newArr } console.log(newArrFn(arr)); //[1, 2, 3, 4, 5, 6, 8]
Set()
ES6新增的数据类型Set的特点就是数据不重复,Set()函数可接收一个数组(或类数组对象)进行初始化,以此也可实现数组去重
var arr = [1, 2, 3, 4, 5, 6, 4, 3, 8, 1] // 数组去重: // 方法4: set function newArrFn(arr) { // .new Set方法,返回是一个类数组,需要结合 ...运算符,转成真实数组 return ([...new Set(arr)]) } console.log(newArrFn(arr)); //[1, 2, 3, 4, 5, 6, 8]