美文网首页
数组去重

数组去重

作者: 不忘初心_6b23 | 来源:发表于2020-04-08 16:46 被阅读0次

    数组相关操作

    1.数组去重

    (1)indexOf()去重

    function unique(arr){
       if (!Array.isArray(arr)) {
           console.log('type error!')
           return
       }
           let tmp = []
           arr.forEach((itm,idx) =>{
           if(tmp.indexOf(arr[idx]) === -1){
               tmp.push(itm)
           }
       })
         return tmp
    }
    

    (2) 对象属性去重(推荐,因为只需要遍历一遍)

    function unique(arr){
        if (!Array.isArray(arr)) {
            console.log('type error!')
            return
        }
        let obj = {}
        let tmp = []
        arr.forEach(itm =>{
            if(!obj[itm]){
                tmp.push(itm)
                obj[itm] = true
            }
        })
        return tmp
    }
    

    (3)set与解构赋值去重(推荐,便利,快速)

    function unique(arr){
        if (!Array.isArray(arr)) {
            console.log('type error!')
            return
        }
          return [...new Set(arr)]
    }
    

    (4)set与Array.from(推荐,便利,快速)

    function unique(arr){
        if (!Array.isArray(arr)) {
            console.log('type error!')
            return
        }
          return Array.from(new Set(arr))
    }
    
    2.有一个长度为 100 的数组,如何从中随机挑选 10 个不重复的元素,组成一个新的数组?
    function random(len, start, end) {
      var arr = [];
      function _inner(start, end) {
        return parseInt(Math.random() * (end - start) + start)
      }
      while (arr.length < len) {
        var num = _inner(start, end);
        if (arr.indexOf(num) == -1) {
          arr.push(num);
        }
      }
        return arr;
    }
    
    3.数组排序

    (1)冒泡排序

    unction bubbleSort(arr) {  
        for(let i = 0,l=arr.length;i<l-1;i++) {
            for(let j = i+1;j<l;j++) {
              if(arr[i]>arr[j]) {
                    let tem = arr[i];
                    arr[i] = arr[j];
                    arr[j] = tem;
                }
            }
        }
        return arr;
    }
    

    (2)选择排序

    function quickSort(arr) {
        if(arr.length<=1) {
            return arr;
        }
        let leftArr = [];
        let rightArr = [];
        let q = arr[0];
        for(let i = 1,l=arr.length; i<l; i++) {
            if(arr[i]>q) {
                rightArr.push(arr[i]);
            }else{
                leftArr.push(arr[i]);
            }
        }
        return [].concat(quickSort(leftArr),[q],quickSort(rightArr));
    }
    
    4.判断是数组
    function isArray(arg) {
        if (typeof arg === 'object') {
            return Object.prototype.toString.call(arg) === '[object Array]';
        }
        return false;
    }
    
    5.判断是对象
    function isObject(arg) {
        if (typeof arg === 'object') {
            return Object.prototype.toString.call(arg) === '[object Object]';
        }
        return false;
    }
    
    typeof obj === Object
    
    // 根据typeof判断对象也不太准确
    表达式                       返回值
    typeof undefined           'undefined'
    typeof null                'object'
    typeof true                'boolean'
    typeof 123                 'number'
    typeof "abc"               'string'
    typeof function() {}       'function'
    typeof {}                  'object'
    typeof []                  'object'
    

    相关文章

      网友评论

          本文标题:数组去重

          本文链接:https://www.haomeiwen.com/subject/fobtmhtx.html