将数组扁平化并去除其中重复数据,最终得到一个升序且不重复的数组

366 阅读1分钟
/*
 * @Descripttion: 将数组扁平化并去除其中重复数据,最终得到一个升序且不重复的数组
 * @version: 
 * @Author: ZhaoBingyu
 * @Date: 2020-04-17 20:44:31
 * @LastEditors: ZhaoBingyu
 * @LastEditTime: 2020-04-17 23:22:28
 */
let arr = [[1,2,2],[3,4,5,5],[6,7,8,9,[11,12,[12,13,[14]]]],10]

/**
 * @descripttion: 数组扁平化
 * @param {type} 
 * @return: 新数组
 */
function flatArr1(arr){
    if(Object.prototype.toString.call(arr) !== '[object Array]'){
        console.error('输入参数要求微数组类型!')
        return
    }
    let newarr = arr.flat(Infinity)
    return newarr
}

console.log('flatArr1:',flatArr1(arr))

function flatArr2(arr){
    let newarr = arr
    while(newarr.some(Array.isArray)){
        newarr = [].concat(...newarr)
     }
     return newarr
}
console.log('flatArr2',flatArr2(arr))

function flatArr3(arr){
   let newarr = []
   for(const item of arr){
       item instanceof Array ? newarr = newarr.concat(flatArr3(item)) : newarr.push(item)
   }
   return newarr
}

console.log('flatArray3:', flatArr3(arr))

function flatArr4(arr){
    let newarr = [JSON.stringify(arr).replace(/\[|\}/g,'')]
    return newarr
    
}

console.log('flatArr4:', flatArr3(arr))

/**
 * @descripttion: 数组去重
 * @param {type} 
 * @return: 新数组
 */

 function uniqArr1(arr){
     let newarr = Array.from(new Set(arr))
     return newarr
 }
 console.log('uniqArr1', uniqArr1(flatArr3(arr)))

 function uniqArr2(arr){
     let newarr = [...new Set(arr)]
     return newarr
 }
 console.log('uniqArr2', uniqArr2(flatArr3(arr)))

 function uniqArr3(arr){
    let temp = {}
    let newarr = []
    for(let item of arr){
        if(!temp[item]){
            temp[item] = '1'
            newarr.push(item)
        }
    }
    return newarr
}
console.log('uniqArr3', uniqArr3(flatArr3(arr)))

function uniqArr4(arr){
    let newarr = []
    for(let i=0; i<arr.length; i++){
        if(newarr.indexOf(arr[i])===-1){
            newarr.push(arr[i])
        }
    }
    return newarr
}
console.log('uniqArr4', uniqArr4(flatArr3(arr)))

/**
 * @descripttion: 数组升序
 * @param {type} 
 * @return: 新数组
 */

 function sortArr1(arr){
     let newarr = []
     newarr = arr.sort((a,b)=>{
         return a-b
     })
     return newarr 
 }
console.log('sortArr1', sortArr1(uniqArr4(flatArr3(arr))))

function sortArr2(arr){
    let newarr = arr
    let len = newarr.length
    for(let i=0; i<len; i++){
        for(let j=0; j<len-i-1; j++){
            if(newarr[j]>newarr[j+1]){
                let temp = newarr[j]
                newarr[j] = newarr[j+1]
                newarr[j+1] = temp
            }
        }
    }
    return newarr
}
console.log('sortArr2', sortArr2(uniqArr4(flatArr3(arr))))

function sortArr3(arr){
    let newarr = arr
    let len = arr.length
    let min = null
    let temp = null
    for(let i=0; i<len-1; i++){
        min = i
        for(let j=i+1; j<len; j++){
            if(newarr[j]<arr[min]){
                min = j
            }
        }
        temp = newarr[i]
        newarr[i] = newarr[min]
        newarr[min] = temp
    }
    return newarr
}
console.log('sortArr3', sortArr3(uniqArr4(flatArr3(arr))))



/**
 * 1.数组扁平化
 * 2.数组去重
 * 3.数组排序
 */
 function formatArr(arr){
    let newarr = [...new Set(arr.flat(Infinity))].sort((a,b)=>a-b)
    return newarr
 }
 console.log('formatArr:', formatArr(arr))