数组去重

目标:要求去除数组里重复的元素

(一)、基础知识

首先来了解以下js数组的两个方法。

splice 方法

splice() 方法用于添加或删除数组中的元素。它会返回被删除元素的数组,如果什么都没有删除,就返回空数组

语法:array.splice(index,howmany,item1,.....,itemX)

参数 描述
index 必需。规定从何处添加/删除元素。 该参数是开始插入和(或)删除的数组元素的下标,必须是数字。
howmany 可选。规定应该删除多少元素。必须是数字,但可以是 "0"。 如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
item1, ..., itemX 可选。要添加到数组的新元素
var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(2,1,"Lemon","Kiwi");
输出结果:Banana,Orange,Lemon,Kiwi,Mango

indexof方法

indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置,返回查找指定字符串第一次出现的位置,如果没找到匹配的字符串则返回 -1。

语法:string.indexOf(searchvalue,start)

参数 描述
searchvalue 必需。规定需检索的字符串值。
start 可选的整数参数。规定在字符串中开始检索的位置。它的合法取值是 0 到 string Object.length - 1。如省略该参数,则将从字符串的首字符开始检索。
var str="Hello world, welcome to the universe.";
var n=str.indexOf("e",5);
输出结果:14

(二)、核心思路

方法一:将数组中的每一个元素与其他元素作比较,如果发现有重复元素,利用splice 方法删除数组中的元素

var arr = [2,4,2,2,4,6]
function unique(arr) {
    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);
            }
        }
    }
    return arr;
}
console.log(unique(arr));
输出结果:(3) [2, 4, 6]

方法二:新建一个空的结果数组,for 循环原数组,判断新数组是否存在当前元素,如果有相同的值则跳过,不相同则push进新数组。

var arr = [2, 4, 2, 2, 4, 6]
function unique(arr) {
    var newArr = [];
    for (var i = 0; i < arr.length; i++) {
        if (newArr.indexOf(arr[i]) === -1) {
            newArr.push(arr[i]);
        }
    }
    return newArr;
}
console.log(unique(arr));
输出结果:(3) [2, 4, 6]