关于数组去重

方法一:双层循环去重

function uniqueArr(arr) {
    var result = [];
    for (var i = 0; i < arr.length; i++) {
        for (var j = i + 1; j < arr.length; j++) {
            if (arr[i] === arr[j]) {
                j = ++i;
            }
        }
        result.push(arr[i]);
    }
    return result;
}

方法二:利用对象的属性不能相同去重

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

 方法三:利用下标

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

 

方法四:filter+indexOf

  去除重复元素依靠的是indexOf总是返回第一个元素的位置,

  后续的重复元素位置与indexOf返回的位置不相等,因此被filter滤掉了

var arr = [1, 2, 3, 1, 2, 3, 2, 2, 2, 2, 1, 4, 6, 32, 1]
arr.filter((item,index)=>{  return arr.indexOf(item) ===index })  // [1, 2, 3, 4, 6, 32]

 

方法五:new Set()

var arr = [1, 2, 3, 1, 2, 3, 2, 2, 2, 2, 1, 4, 6, 32, 1];
Array.from(new Set([...a]))

 判断变量是否为数组

方法一:intanceof

var arr = [1,2,3,4],obj = {a:1,b:2,c:3}

arr intanceof Array  //true
obj intanceof Object //true

方法二:Array.isArray()

var arr = [1,2,3,4],obj = {a:1,b:2,c:3}

Array.isArray(arr) //true
Array.isArray(obj) // false

方法三:constructor

var arr = [1,2,3,4],obj = {a:1,b:2,c:3}

arr.constructor.name  //Array
obj.constructor.name //Object

 

posted @ 2018-11-19 10:18  sutong  阅读(152)  评论(0编辑  收藏  举报