数组去重和排序

850 阅读1分钟
    // 基本数组的去重
    // 方法1  es6语法 直接使用new Set() 方法
    let arr = [11, 33, 11, 22]
    let list = Array.from(new Set(arr))
    console.log(list)

    // 方法2  使用数组值比较  通过splice 方法删除掉重复出现的值
    for (let i = 0; i < arr.length; i++) {
        for (let j = i + 1; j < arr.length; j++) {
            if (arr[i] === arr[j]) {
                arr.splice(j, 1)
                j--
            }
        }
    }
    // 方法三 冒泡排序 
    外循环是表示循环多少次完成排序的工作
    内循环是每次选出一个最大值放置到最后,内循环使用arr.length-i,目的避免浪费性能,因为每次完成一次内循环可以确认最大值都会放到后置位,所有经过前一轮内循环比较出来的值,不用在继续和接下来内循环的最大值做比较,i值也每次只会递增1,说明每一轮每循环都会选出一个本轮在最大的值,放在后面,所有内循环时使用arr.length-i,能减少比较的次数
    
    
    实现的过程 
    通过内循环比较相邻两个值的大小
    如果左边比右边大
    使用中间变量 m 来存放小值
    将左边的值赋值给右边 arr[j+1] = arr[j]
    将m值赋值给左边变量  arr[j] = m
    这样就实现了大小值的位置互换
    继续内循环时 将会用大值 和 它右边的值继续比较 
    重复上面的逻辑 
    最后完成一圈内循环  就能得到一个最大值 放置到数组的最后面
    for(let i=0;i<arr.length;i++){
        for(let j=0;j<arr.length - i;j++){
            if(arr[j]>arr[j+1]){
                let m = arr[j+1]
                arr[j+1] = arr[j]
                arr[j] = m
            }
        }
   
     }
     console.log(arr)
  

    //  对象数组的去重 
    let aryList = [
        { name: '小铭', age: 18 },
        { name: '小铭', age: 18 },
        { name: '小红', age: 5 },
        { name: '王师傅', age: 58 },
        { name: '王师傅', age: 58 },
        { name: '电脑维修元', age: 178 }
    ]
    // 去重的条件  按name 进行去重按age进行排序
  
    function qx(aryList) {
        let obj = {};
        let newList= [];
        for(let i=0;i<aryList.length;i++){
            //aryList[i].name 对象中key 不能重复会达到去重地效果 
            
            例如 
            obj = {
                小铭:{ name: '小铭', age: 18 },
                小铭:{ name: '小铭', age: 18 },
            }
            当出现重复的属性时后面的会替换掉前面key对应的值
            得到的是下面的结果,不会出现上面的情况,所有能实现去重
            obj = {
                   小铭:{ name: '小铭', age: 18 },
            }
            相同属性只能存在一个在对象的同一级中 
            
            
            obj[aryList[i].name] = aryList[i]
        }
       
        for(let key in obj){
            newList.push(obj[key])
        }

        // 按年龄排序  通过对象的属性值进行排序
        newList.sort(function(a,b){
            let value1 = a.age
            let value2 = b.age
            return value1  - value2
        })
        console.log(newList)
    }
    qx(aryList)