• js数组去重


    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
    </head>
    <body>
      <script>
    
        //使用一个空对象,只需要一个for循环,效率高(不能区分1和'1')      
        function unique1(arr){      
            var res = [];      
            var json = {};      
            for(var i = 0; i < arr.length; i++){      
                if(!json[arr[i]]){      
                    res.push(arr[i]);      
                    json[arr[i]] = 1;      
                }      
            }      
            return res;      
        };      
    
        //数组去重,不使用es6的Set集合,能区分1和'1',只有一次for循环(性能高)     
        function unique2(array){     
            var n = {}, r = [], len = array.length, val, type;     
            for (var i = 0; i < array.length; i++) {     
                val = array[i];     
                type = typeof val;     
                if (!n[val]) {     
                    n[val] = [type];     
                    r.push(val);     
                } else if (n[val].indexOf(type) < 0) {     
                    n[val].push(type);     
                    r.push(val);     
                }     
            }     
            return r;     
        }               
        
        var arr = [0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 6, '1', 'a', true, false, true];    
    
        console.log(arr)
        console.log(unique1(arr));
    
        console.log(arr)
        console.log(unique2(arr))
    
        console.log(arr)
        //使用es6的Set集合和数组解构,只需要一行代码
        console.log([...new Set(arr)])
    
    
        //只使用Set判断元素是否存在,更灵活
        let unique3 = (arr) => {
          let newArr = []
          let set = new Set()
          for (let i = 0; i < arr.length; i++) {
            if (!set.has(arr[i])) {
              set.add(arr[i])
              newArr.push(arr[i])
            }
          }
          return newArr
        }
    
        console.log(arr)
        console.log(unique3(arr))
    
        //数组去重,并将所有数字类型的元素乘以2,所有字符串类型的元素重复拼接,其他类型不做处理
        let unique4 = (arr) => {
          let newArr = []
          let set = new Set()
          for (let i = 0; i < arr.length; i++) {
            if (!set.has(arr[i])) {
              set.add(arr[i])
              if (typeof arr[i] === 'number') {
                newArr.push(arr[i] * 2)
              } else if (typeof arr[i] === 'string') {
                newArr.push(arr[i] + arr[i])
              } else {
                newArr.push(arr[i])
              }
              
            }
          }
          return newArr
        }
    
        console.log(arr)
        console.log(unique4(arr))
      </script>
    </body>
    </html>

  • 相关阅读:
    ESP32 SDA和SCL
    ESP32的HSPI和VSPI区别
    ffmpeg生成视频封面图
    小程序读取几种不同格式json数据(小程序json解析)
    ajax
    使用Java语言,连接linux服务器,并远程执行shell 脚本
    Echarts饼图的使用
    js提取对象数组中的某一个属性
    java读取文件推送报文
    java读取本地文件内容TXT文件
  • 原文地址:https://www.cnblogs.com/xutongbao/p/14876284.html
Copyright © 2020-2023  润新知