数组去重&数组降维

331 阅读1分钟

数组去重

let arr = [...new Set(arr)]
console.log(arr)

let arr = reduce((total,item)=>{
    return total.includes(item) ? totla : total.concat(item)
},[])

var resArr = array.filter(function(item,index,arr){
    return index == arr.indexOf(item)
})
console.log(resArr)

function unique(arr){
    var item;
    var newArr = []
    var newObj = []
    for(var i = 0;i<arr.length;i++){
        item = arr[i]
        if(!newObj[item]){
            newObj[item] = item
            newArr.push(item)
        }
    }
    return newArr
}

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)
                j-- //因为数组长度减小1,所以直接 j++ 会漏掉一个元素,所以要 j--
            }
        }
    }
    return arr
}

数组对象去重

function distinct(arr,key){ // key -> "id", key is string
    let map = new Map()
    for (const item of arr) {
        if(!map.has(item[key])){
            map.set(item[key],item)
        }
    }
    return [...map.values()]
}

function distinct(arr,key){    // key -> "id", key is string
    let temp = {}
    let resarr = arr.reduce((totla,item)=>{
        if(!temp[item[key]]){
            temp[item[key]] = item[key]
            totla.push(item)
        }
        return totla
    },[])
    return resarr
}

function distinct(arr,key){ // key -> "id", key is string 
    var newobj = {},newarr = []
    for(var i = 0;i<arr.length;i++){
        var item = arr[i]
        if(!newobj[item[key]]){
            newobj[item[key]] = newarr.push(item)
        }
    }
    return newarr
}

function distinct(arr, key) { // key -> "id", key is string
    for (var i = 0; i < arr.length - 1; i++) {
        for (var j = i + 1; j < arr.length; j++) {
            if (arr[i][key] == arr[j][key]) {
                arr.splice(j, 1)
                j--
            }
        }
    }
    return arr
}

数组降维

flat会存在兼容问题

  • 二维数组

    let arr = [[1, 2, 3], [2, 3, 4], [2, 5, 7]]
    var res1 = arr.flat()
    

    let arr = [[1, 2, 3], [2, 3, 4], [2, 5, 7]]
    var res2 = arr.reduce((total, item) => {
        return total.concat(item)
    }, [])
    
  • 多维数组

    let arr = [[1, 2, 3], [2, [4, 5, [3, 6]]], [2, [8, 9]]]
    let res = function (arr) {
        return arr.reduce((total, item) => {
            return total.concat(
                Array.isArray(item) ?
                    res(item) :
                    item
            );
        }, []);
    }
    console.log(res(arr));
    

    let arr = [[1, 2, 3], [2, [4, 5, [3, 6]]], [2, [8, 9]]]
    let res4  = arr.flat(Infinity)
    console.log(res4);