数组去重

2020-04-08  本文已影响0人  不忘初心_6b23

数组相关操作

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'
上一篇下一篇

猜你喜欢

热点阅读