说起数组去重大家都不陌生,去重也有好多种方法,这里介绍很好理解的两种。
第一种
首先说一下第一种的逻辑,就是先拿第一个去跟第二个比,再跟第三个比,再跟第四个比……只要发现有相等的,可以用splice()方法去掉,这一圈比完了,再拿第二个去跟第三个比,再跟第四个比……就这么一直比下去,直到都判断完毕,那么一看就是要两个循环,看代码。
var arr = [1,2,1,3,4,5,5]; console.log(arr); //1,2,1,3,4,5,5 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); } } } console.log(arr); //1,2,3,4,5
顺便介绍一下splice()的用法:
(1)删除功能
arr.splice(a, b):从a(索引)开始截取b个元素,直接在原数组中去掉,上面去重就用到了这个功能。
var box = [‘apple‘,‘orange‘,‘banana‘]; var box2 = box.splice(0,2); console.log(box2); //"apple", "orange" console.log(box); //"banana"
(2)插入功能
arr.splice(a, b, c):第二个参数b为0,那么只添加不截取,即从a处添加c元素。
var box = [‘apple‘,‘orange‘,‘banana‘]; var box2 = box.splice(1,0,‘mango‘); console.log(box2); //在索引1处插入一个元素 console.log(box); //"apple", "mango", "orange", "banana"
(3)替换功能
arr.splice(a, b, c):b不为0,从a处截取b个元素(直接去掉),并把截取的元素替换成c。
var box = [‘apple‘,‘orange‘,‘banana‘]; var box2 = box.splice(1,1,‘mango‘); console.log(box2); //"orange" console.log(box); //"apple", "mango", "banana"
是不是对这个方法有深的了解了呢
第二种
第二种是通过 indexOf() 方法来实现这个效果,利用它差找不到的项返回 -1 这一特性,创建一个空数组,一项项循环即可。
var arr = [1,2,1,3,4,5,5]; var s = []; for(var i=0; i<arr.length; i++){ if(s.indexOf(arr[i]) == -1){ s.push(arr[i]); } } console.log(s); //1,2,3,4,5
说到indexOf(),此时我又想到一个例子,作为补充,关于查找某个字符出现的位置,原理一样。
var str = "you ying yi shang"; var strbox = []; var res = str.indexOf(‘y‘); while(res > -1){ strbox.push(res); res = str.indexOf(‘y‘, res+1); } console.log(strbox); //0,4,9
创建一个空数组strbox来存放搜索到的字符的位置,定义一个变量先获取第一个搜索到的y的位置,如果大于 -1 ,将索引位置添加到strbox中,然后在此位置+1后继续往后搜索,如果res的值仍大于-1,说明还有y存在,继续存放,继续搜索,直到等于 -1,可输出查看。
时间: 2024-10-10 02:15:51