面试中js原生命中率特别高,其中数组又是重中之重,关于数组去重,总结了一下几种方法,仅供参考,欢迎批评指正
方法一:双重for循环(-)
思路:构建一个新的数组存放结果。
for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组对比。
若结果数组中没有该元素,则存到结果数组中。
var quChong =[-1,-2,1,1, 0,4,5,8,1,1,2,2,5,6,7];
var qunew =[];
function quC(){
for(var i =0;i<quChong.length;i++){
for(var j =i+1;j<quChong.length;j++){
if(quChong[i]==quChong[j]){
quChong.splice(j,1);
j--;
}
}
}
return qunew;
}
re =quC();
console.log(re);
方法二:双重for循环(=)
function qc(arr){
var arr1 = [];
for(var i = 0;i<arr.length;i++){
for(var j = i+1;j<arr.length;j++){
if(arr[i]===arr[j]){
++i
}
}
arr1.push(arr[i])
}
return arr1
}
console.log(qc(arr))
方法三:indexOf和push相结合重点
注意: indexOf低版本浏览器不支持
function quC(){
var arrf = [1,2,6,54,84,3,13,1,2,2];
var arrne = [];
for(var b = 0; b < arrf.length;b++){
if(arrne.indexOf(arrf[b]) == -1){
// arrne.push(arrf[b]);//方法一:用push直接添加到新数组
arrne.splice(1,0,arrf[b]);//方法二:用splice的添加功能,
// 因为splice有删除和添加的功能,splice(0,0,arr[b])中0是从哪一项
// 开始,第二个0是删除,不删除这一项就是0,arr[b]就是添加哪一项
}
}
return arrne;
}
re =quC();
console.log(re);
方法四:indexOf方法去重
var arr = [10,1,23,1,74,23,14,14,74];
Array.prototype.unique = function(){
var temp = [];
var len = this.length;//不写在循环内可以节省效率,只被访问一次
for ( var i = 0; i < len;i++){
if(temp.indexOf(this[i])== -1){
temp.push(this[i]);
}
}
return temp;
}
console.log(arr.unique());
方法五:sort 方法
思路:
先将数组排序,一样的在一起,
var一个新空数组,将原数组的第一位赋值到空数组中
将空数组中的末项与原数组中的i项相比较,(新数组末=新数组.length-1)
如果不一致将原数组的i元素push到新数组中
var arr =[1,2,3,2,1,3,5,1];
function unquin(arr){
var sarr = arr.sort();//先将原数组排序
var len = arr.length;//提高代码效率
var narr = [sarr[0]]//将原数组的第1个元素添加到新数组中
for(var i = 0;i<len;i++){
if(narr[narr.length-1]!==sarr[i]){//判断新数组中最后一项若和原数组中值不相等
narr.push(sarr[i]);//将不重复的值push到新数组中
}
}
return narr;
}
console.log(unquin(arr));
方法六:对象数组去重
// 思路:
var一个空对象,和一个空数组
将工具封装到原型上,
判断对象上有没有属性名为原数组下标为i的元素的属性名,
没有将此元素作为该对象的一个属性名并赋一个不为false的值添加到该对象中
同时将这个元素上添加到新数组中
var arr =[1,1,2,2,2,4,6,4];
Array.prototype.unquin=function(){
var obj = {};//创建空对象
var len =this.length;//让长度等于指向的数组长度
var narr = [];//创建空数组
for(var i = 0;i < len;i++){
if(!obj[this[i]]){//查看对象属性
obj[this[i]] = "a"//给对象的属性名赋一个不为false的值
narr.push(this[i])//将元素添加大数组
}
}
return narr;
}
console.log(arr.unquin());
以上是我根据之前使用过的方法总结的,当然去重并不是只有这几种方法,你可以去尝试一下其他方法