数组去重看似一个简单的问题,随着我们的学习,对于新知识的掌握这个曾经困着我们的问题逐渐变得游刃有余。要去重,中心解决办法就是比较该数组中是否重复的元素,而后将重复的元素去掉。以下带来几个楼主折磨自己中研究出的一点方法~~
方法一
for循环法~~
思路:将数组中的每一个数与数组中其他的数进行比较,看是否有相同的。如果没有相同的那么该数即直接放到新数组里。新的数组中就是无重复的数组。
实例:
function solution1(){
var arr = [1,1,1,3,4,3,4,6,8,3,1,2];
var res = [];
for(var i = 0; i < arr.length; i ++){ // 第一层for用来控制循环的次数
for(var j = 0; j < i; j++){ //第二层for 用于控制与第一层比较的元素
if(res[j] == arr[i])
break;
}
//注:关键:没有吧后面的IF放入循环,所以第一次会循环进if(res.length == j),让res有一个初始的值。
if(res.length == j) //这个的思路比较巧妙,意思是:当该数比较到最后一位都没有数与它相等,那么直接可以表明这个数在该数组中没有重复的,可以直接输出。res[res.length] = arr[i];
}
document.writeln( res);
}
solution1();
方法二
hash数组法~hash数组法即用原数组中的元素作为新数组的下标。如果hash数组(或者理解为对象)里没有这个属性的话(即:该数组的项没有被定义)就会返回undefined。 利用这个原理,当返回的是undefined时 ,把这个元素放入数组中, 然后在给这个属性赋值
function fun2() {
var arr = [1,1,1,3,4,3,4,6,8,3,1,2];
document.writeln(arr + "<br>" );
for(var i = 0, hash = [], res = []; i < arr.length; i++){
if(hash[arr[i]] === undefined){ //如果hash数组(或者理解为对象)里没有这个属性的话(即:该数组的项没有被定义)就会返回undefined。
res[res.length] = arr[i]; //将这个不重复的元素添加到新数组中。
hash[arr[i]] = true;
}
}
document.writeln( res + "<br>");
}
fun2();
方法三
当然有朋友就会问了,之前的都是以生成新的数组来避开对原数组的更改。如果想在原数组上怎么办?
这里用方法1引申一下。具体如下所示:
function fun3() {
var arr = [1,1,1,3,4,3,4,6,8,3,1,2];
for(var i=0; i<arr.length; i++){ // for用来控制循环的次数
for(var j=i+1; j<arr.length; j++){ //第二层for 用于控制与第一层比较的元素
if(arr[i] == arr[j]){ //如果想相等的元素,就删除后面的那个元素 即(即arr[j] 这个元素)
arr.splice(j,1);
j--; // j--很关键!!!因为每次使用splice删除元素时,原数组改变,后面的元素下标会发生改变。比如删除了原本的第二位,那么原本的第三位就变成新的第二位了。这意味这数组下次遍历是 比较市跳过了一个元素。所以,做J--来保证纵然是那出了之后仍然会与每一个数进行比较~~
}
}
}
document.writeln(arr);
}
若要在方法二上使用也是一样的道理!J - -至关重要!