无论是在面试还是实际写代码中都会经常遇到数组去重,那接下来我们介绍几种数组去重的方法。
- var arr = [3,6,4,1,8,8,8,8,8,4,0,9,2,7,8,5,3,4,8,9,3];
1、第一种是声明一个空数组,通过indexOf( )查找的方法,判断这个新数组中有没有该元素,如果没有即查找结果为 -1 时,将这个元素添加到新数组的末尾。
js代码为:
- //1.创建一个空数组,把arr里面的元素往空对象中添加,判断如果空数组没有这个元素,加
- var array = [];
- for( var i = 0; i<arr.length; i++ ) {
- if( array.indexOf(arr[i]) == -1 ) {
- array.push( arr[i] );
- }
- }
- console.log(array);
2、第二种是操作数组自身:
从第一项开始,拿该项和后面的所有项作比较,如果后面有和比较项相等的,就把后面的一项删除。删除的方法会改变当前数组的长度,后面的元素会自动往前挪,所以补位上来的元素需要在进行一次比较,让下标进行自减操作。
比较的详细过程即是为:
拿数组中第一个元素,和后面所有的元素进行比较,如果一样删除后面哪一个
拿数组中第二个元素,和后面所有的元素进行比较,如果一样删除后面哪一个
...
数组中所有的元素后需要和后面的进行比较,所以需要进行for循环的嵌套
代码为:
- 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--;
- //删除一个元素后元素位置会自动往前挪,下标也需要往前j--
- }
- }
- }
- console.log(arr);
3、先使用sort()方法对数组进行排序,再比较看数组是否和相邻的项相等,如果不同则存入新数组中
- // 先对数组进行sort排序
- var sortArr = arr.sort();
- // 初始化结果数组并存一个值
- var res = [sortArr[0]];
- // 循环遍历数组进行比较
- for (var i = 1; i < sortArr.length; i++) {
- // 如果当前的比较项与结果数组的最后一项不相等则放入
- if (sortArr[i] !== res[res.length - 1]) {
- res.push(sortArr[i]);
- }
- }
- console.log(res);