数组去重的方法总结
方法一 // var arr = [1, 'a', 'a', 'b', 'd', 'e', 1, 0]; // Array.prototype.unique1 = function () { // var res = [this[0]];//获取数组的第一个元素 res = [1] // for (var i = 1; i < this.length; i++) { // var repeat = false;//假设最开始没有重复 // for (var j = 0; j < res.length; j++) { // if (this[i] == res[j]) { //i=1 this[1]=a res= [1] res.length =1 res= [1,'a'] // repeat = true; //i=2 this[2]=a res= [1,'a'] res.length =2 res= [1,'a'] // break; //i=3 this[3]=b res= [1,'a'] res.length = 2 res= [1,'a','b'] // } //i=4 ...... // } // if (!repeat) { // res.push(this[i]); // } // } // return res; // } // var arr = [1, 'a', 'a', 'b', 'd', 'e', 1, 0]; // console.log(arr.unique1()); 方法二 //如果对象属性不存在,不会报错,返回undefined //直接设置一个不存在的属性,就直接相当于给对象添加了一个属性(动态属性) // Array.prototype.unique3 = function () { // var res = []; // var json = {}; // for (var i = 0; i < this.length; i++) { // if (!json[this[i]]) { //i=0 this[i]=1 json[1]=undefined res = [1] json={1:1} // res.push(this[i]); //i= 1 this[i]=a json[a]=undefined res = [1,'a'] json={1:1,"a":1} // json[this[i]] = 1; //i =2 this[i]= a json[a]=1 res = [1,'a'] json={1:1,"a":1} //i=3 this[i]= b json[b]=undefined res= [1,'a','b'] json={1:1,"a":1,"b":1} // } // } // return res; // } // var arr = [1, 'a', 'a', 'b', 'd', 'e', 1, 0]; // console.log(arr.unique3()); 方法三 // 简单粗暴法 (Set): /* let arr = [1, 1, 3, 3, 2, 2, 5, 5, 6, 6, 7, 7]; let nowArr = [] Array.prototype.unique1 = function () { let newArr = [...new Set(this)]; return newArr; } let arr1 = arr.unique1(); console.log(arr); console.log(arr1); */ 方法四 /* let arr = [1, 1, 3, 3, 2, 2, 5, 5, 6, 6, 7, 7]; let nowArr = [] Array.prototype.unique2 = function () { let newArr = [this[0]]; //一个新的临时数组 for (let i = 1; i < this.length; i++) { //从第二项开始遍历 if (newArr.indexOf(this[i]) == -1) { // indexOf: 可返回某个指定的值在数组(字符串)中首次出现的位置。 newArr.push(this[i]); // 返回值:-1 说明该数组中没有出现过这个数 push到临时数组里去 } // 返回值 !-1(为该值在数组中的下标) 说明临时数组中已存在该值 就忽略 } return newArr; } let arr1 = arr.unique2(); console.log(arr); console.log(arr1); */ 方法五 // 优化遍历数组法 // var arr = [1, 3, 4, 5, 3, 4, 8, 9, 8, 4]; // for (var i = 0; i < arr.length; i++) { // for (var j = i + 1; j < arr.length; j++) { // if (arr[i] == arr[j]) { // arr.splice(j, 1); // j--; // } // } // } // console.log(arr) //[1,3,4,5,8,9]