Js 的几种去重(一维)

写的几种数组去重方法:

第一种: [利用排序方法,然后比较当前元素与下一个元素是否相等]

function repeat1(arr)
    {
        var length = arr.length;
        var result = [];
        arr.sort();//这里是关键
        for (var i = 0;i < length;i++) {
            if (arr[i] !== arr[i+1]) {
                result.push(arr[i]);
            }
        }
        console.log(result);
    }

第二种: [巧用一个indexOf方法来查找当前元素是否在一个字符串里.这里可以用array检索]

function repeat2(arr)
    {
        var length = arr.length;
        var result = [];
        for (var i = 0;i < length;i++) {
            if (result.indexOf(arr[i]) === -1) {
                result.push(arr[i]);
            }
        }
        console.log(result);
    }

第三种: [利用一个obj的key-value唯一来达到去重]

function repeat3(arr)
    {
        var length = arr.length;
        var result = [],
            obj = {};
        for (var i = 0;i < length;i++) {
            if ( ! obj[arr[i]]) {
                obj[arr[i]] = 1;
                result.push(arr[i]);
            }
        }
        console.log(result);
    }

----运行----

var tmp_arr = [1, 'ddd', '哈', '哈', 'ddd', 'ddd', '2', '1', 'i', 'i', NaN, NaN];
    repeat1(tmp_arr);
    repeat2(tmp_arr);
    repeat3(tmp_arr);

----结果----

总结:::

这里的NaN是个非数字的特殊值, NaN === NaN 这里是为false , 所以一二种会有两个NaN;

1与"1" 是类型不同的数, 所有也会有一二种方法也会有两个数值;

最后一个方法是一个key-value 自然key是唯一的, 举个例子就会明白了-->>console.log({1:'wherein',"1":'wherein'});你看这里输出的是什么???  没错, 就是一个Object {1: "11"} , 这道理跟第三种的一样

{适合的可以参考下, 有错的希望能指出下[抱拳]}

原文地址:https://www.cnblogs.com/wherein/p/6872585.html