關於數組的去重

1、簡單一維數組的去重:

簡單一維數組的去重方法有不少,這種數組裏面的值都是普通的數據類型,並無對象,所以去重方法有不少,這裏總結一下經常使用的四種方法(網上還有一些其它的方法):
方法一:雙層循環去重數組

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;
}

方法二:利用對象的屬性不能相同去重code

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;
}

方法四:ES6去重hash

function uniqueArr(arr) {
    return Array.from(new Set(arr));
}

2、包含對象的二維數組去重:

假設有這樣的一個二維數組,數組裏面多個對象的屬性至少有一個都同樣,那就該如何去除重複的數據呢?這裏總結一下兩種方法:
方法一:雙重循環去除法it

function uniqueArr(arr, key) {
    var newArr = [];
    for (var i = 0; i < arr.length; i++) {
        var flag = true;
        for (var j = 0; j < newArr.length; j++) {
            if (arr[i][key] == newArr[j][key]) {
                flag = false;
            }
        }
        if (flag) newArr.push(arr[i]);
    }
    return newArr;
}

方法二:利用reduce來實現io

function uniqueArr(arr, key) {
    var hash = {};
    return arr.reduce(function(item, next) {
        hash[next[key]] ? '' : hash[next[key]] = true && item.push(next);
        return item
    }, []);
}

例子:function

var arr = [{
        id: '001',
        name: 'Jack'
    },
    {
        id: '002',
        name: 'Eric'
    },
    {
        id: '003',
        name: 'Tom'
    },
    {
        id: '003',
        name: 'Lucy'
    },
    {
        id: '002',
        name: 'Lucy'
    },
    {
        id: '004',
        name: 'Jacky'
    },
]
uniqueArr(arr, 'id');
相關文章
相關標籤/搜索