• JS数组实际应用方法整理


    项目里面有个需求,是检测两个数组里面是否有相同的重复项,有则返回 true,没有则返回 false,并且不需要获取重复项的数据。
    如果是需要获取重复项的数据,那肯定需要遍历循环,但是既然只要简单知道是否重复,就没有必要一个个去遍历,直接用 ES6 的新数据类型 Set 即可,因为他有一个特性是每个元素都不重复,因此经常被用来做数组去重。
    通过它的这个特性,自然也可以检测重复,将需要检测的两个数组合并成一个 Set,如果长度小于两个数组的长度之和,那么肯定存在重复项。

     function isInArry(arr1, arr2){
         let new_arr = new Set([...arr1, ...arr2])
         return new_arr.size < (arr1.length + arr2.length)
     }
    

    如果需要取两个数组里面重复的部分,可以换另外一个方法:

    let arr1 = [1,2,3]
    let arr3 = [2,3,7]
    
    function filterArry(arr){
         return arr.filter(i => arr.indexOf(i) !== arr.lastIndexOf(i))
    }
    filterArry(arr1.concat(arr2))
    

    今天又有一个新的需求

    数组随机乱序

    function shuffleArray(arr){
        let m = arr.length
        while (m>1) {
            let index = Math.floor(Math.random() * m--)
            [arr[m], arr[index]] = [arr[index], arr[m]]
        }
        return arr
    }
    

    今天又双叕有一个新的需求,大概就是接口a返回了一个列表,另外一个接口b也返回了一个列表,要把接口b中的字段2插入到接口a返回的列表中去,组合后的数据再循环展示出来。且这两个数组不是排序的,要根据返回的主键id去一一对应。这里采用循环+Map数据格式,减少时间复杂度。

    数组插值

    // 先把数组b转化成Map格式,key为主键id,value为需要插入的字段valueb的值。
    let listB = await getListB()
    let mapB = new Map()
    listB.forEach(item=>mapB.set(item.id, item['valueb']))
    
    // 循环一遍列表a 用Map的get方法取出字段值
    let listA = await getListA()
    listA.forEach(item=>if(mapB.has(item.id))item['valueb'] = mapB.get(item.id))
    

    今天开始入门算法啦,第一道题是排序数组去重

    排序数组去重

    function removeDuplicateArr(arr){
          let index = 0;
        for(let i =0;i<arr.length;i++){
            if(arr[i] != arr[i+1]){
                arr[index] = arr[i]
                index++
            }
        }
        return nums
    }
    

    最后放一张数组常用方法作为备忘录吧图是网上来的

  • 相关阅读:
    Qt通用方法及类库9
    设计模式原则(7)--Composition&AggregationPrinciple(CARP)--合成&聚合复用原则
    设计模式原则(6)--Open-Closed Principle(OCP)--开闭原则
    鼠标悬停出现页面
    设计模式(23)--Visitor--访问者模式--行为型
    设计模式(22)--Template Method(模板方法模式)--行为型
    设计模式(21)--Strategy(策略模式)--行为型
    设计模式(20)--State(状态模式)--行为型
    设计模式(19)--Observer(观察者模式)--行为型
    设计模式(18)--Memento(备忘录模式)--行为型
  • 原文地址:https://www.cnblogs.com/linxue/p/13180684.html
Copyright © 2020-2023  润新知