数组去重+indexOf()应用

说起数组去重大家都不陌生,去重也有好多种方法,这里介绍很好理解的两种。

第一种

首先说一下第一种的逻辑,就是先拿第一个去跟第二个比,再跟第三个比,再跟第四个比……只要发现有相等的,可以用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,可输出查看。

posted @ 2017-08-11 12:19  幽影一殇  阅读(862)  评论(1编辑  收藏  举报