js算法基础01 --- 数组对象去重

菜狗子的自我救赎01

    • 01- 数组对象去重
      • reduce
      • 原生js 利用newObj 和 newArr
      • 利用空数组 和 标识flag
      • 多条件去重 假设 不知拿id 做对比 还有id2 id 3
      • 利用双指针 splice

01- 数组对象去重

把下面数组对象去重

 let arr = [
            { id: 1, name: '周瑜' },
            { id: 3, name: '王昭君' },
            { id: 2, name: '亚瑟' },
            { id: 1, name: '小乔' },
            { id: 2, name: '大桥' },
            { id: 3, name: '韩信' }
        ];

reduce

   function unique(arr) {
            let obj = {}
            arr = arr.reduce((accumulator, current) => {
                // obj[current.id] ? "" : obj[current.id] = accumulator.push(current)
                // return accumulator

                // 上面更优雅的写法 下面是自己写的缓冲带
                if (!obj[current.id]) {
                    obj[current.id] = accumulator.push(current) // 这里arr.push返回数组的长度
                }
                return accumulator

            }, [])
            return arr
        }

原生js 利用newObj 和 newArr

  function unique2(arr) {
            let newObj = {}
            let newArr = []
            for (let i = 0; i < arr.length; i++) {
                // 自己写的垃圾代码 一会做对比 区别
                // 44行这里错误是因为sb  只需要给newObj增加从未出现的id即可  所以我们需要做的是增加obj 的key 为 arr 的id
                // if(newObj[arr[i]] && !newObj[arr[i]]['id'] ){ 
                //     newObj[arr[i]].id = 1
                //     newArr.push(arr[i])
                // }
                let temp = arr[i]
                if (!newObj[temp['id']]) {
                    newObj[temp['id']] = newArr.push(arr[i])
                }
            }
            return newArr
        }

利用空数组 和 标识flag

   function unique3(arr) {
            let newArr = []
            for (let i = 0; i < arr.length; i++) {
                let flag = true
                for (let j = 0; j < newArr.length; j++) {
                    if (arr[i].id === newArr[j].id) { //这里是newArray 的length  如果是arr  就会娶=取不到id
                        flag = false
                        break  //细节break 节省计算量 提高性能
                    }
                }
                if (flag) {
                    newArr.push(arr[i])
                }
            }
            return newArr
        }

多条件去重 假设 不知拿id 做对比 还有id2 id 3

 function unique4(arr, key, key2, key3) {
            let newArr = []
            for(let i=0; i < arr.length; i++){
                let flag = true
                for(let j = 0 ; j < newArr.length; j++){
                    if(arr[i][key]===newArr[j][key]
                        && arr[i][key2]==newArr[j][key2] &&
                        arr[i][key3]==newArr[j][key3]

                    ){
                        flag = false
                    }
                }
                if(flag){
                    newArr.push(arr[i])
                }
            }
            return newArr

        }

利用双指针 splice

    function unique5 (arr,key) {
            for(let i = 0 ; i < arr.length; i++){
                for(let j = i + 1 ; j < arr.length; j++){ //这里j 是i+1
                    if(arr[i][key] == arr[j][key]){
                        arr.splice(j,1)
                   
                    }
                }

            }
            return arr
        }

三室一厅
2023年6月9日 那一天,人类终于回想起了,曾经被他们支配的恐惧
js算法基础01 --- 数组对象去重_第1张图片

计划10日 排序

你可能感兴趣的:(javascript,算法,数学建模)