美文网首页
数组去重

数组去重

作者: abigdonkey | 来源:发表于2018-05-17 22:31 被阅读0次

去重

去重是开发中经常碰到的一个问题。
目前经常是后台接口处使用SQL去重,简单高效,
但是去重依旧是前端开发人员必须掌握的技能哈。

数组去重常用的方法

1.双循环去重

双重for(while)循环是一个简单但比较笨重的方法;
原理:
      a.先定义一个包含原始数组第一个元素的新数组;
      b.然后遍历原始数组,将原始数组中每个元素和新数组中每个元素进行对比;
      c.如果不相同,则添加到新数组中,最后返回新的数组;
      d.该方法时间复杂度为O(n^2), 如果数组长度很大,则非常耗费内存。
代码:
    function unique(arr) {
        if (Object.prototype.toString.call(arr) !== "[object Array]") {
            throw new Error('类型错误');
            return;
        }
        let res = [arr[0]]; 
        for (let i = 1; i < arr.length; i++) { 
            let flag = true;
            for (let j = 0; j < res.length; j++) { 
                if (arr[i] === res[j]) { 
                    flag = false;
                    break;
                }
            }
            if (flag) {
                res.push(arr[i]);
            }
        }
        return res;
    }

2.indexOf 去重

原理:
  a.数组的indexOf方法可以返回指定元素在数组中首次出现的位置;
  b.定义一个空数组;
  c.对原来数组进行遍历;
  d.调用indexOf方法进行判断,元素是否出现在新数组中。
代码:
    function unique(arr) {
        if (Object.prototype.toString.call(arr) !== '[object Array]') {
            throw new Error('类型错误');
            return;
        }
        let res = [];
        for (let i = 0; i < arr.length; i++) {
            if (res.indexOf(arr[i]) === -1) {
                res.push(arr[i]);
            }
        }
        return res;
    }

3.indexOf()去重

原理:
  a.利用indexOf方法检测元素在数组中第一次出现的位置和元素现在的位置是否相等;
  b.如果不想等,则说明是重复元素

代码:
    function unique(arr) {
        if (Object.prototype.toString.call(arr) !== '[object Array]') {
            throw new Error('类型错误');
            return;
        }
        return Array.prototype.filter.call(arr, function (item, index) {
            return arr.indexOf(item) === index;
        })
    }

4.利用对象属性去重

原理:
  a.创建空对象;
  b.遍历数组;
  c.将数组中的值设为对象的属性,并给该属性初始化值1;
  d.每出现一次,对应的属性值+1,属性值则为该元素出现的次数;
代码:
  function unique(arr) {
        if (Object.prototype.toString.call(arr) !== '[object Array]') {
            throw new Error('类型错误');
            return;
        }
        let res = [], obj = {};
        
        for (let i = 0; i < arr.length; i++) {
            if (!obj[arr[i]]) {
                // 如果对象中不存在,则赋值
                obj[arr[i]] = 1;
                res.push(arr[i]);
            } else {
                obj[arr[i]]++;
            }
        }
        return res;
    }

相关文章

  • Array集结号

    实现数组去重的几种方法 数组去重一 数组去重二 利用数组indexof+push实现数组去重 数组去重三 利用对象...

  • 实现数组去重有哪些方式

    简单的数组去重 数组对象去重

  • 数组去重的四种方法

    利用双for循环去重 利用对象数组去重 利用对象数组去重并且记录重复次数 通过创建一个新数组进行数组去重

  • js数组去重、对象数组去重

    普通数组去重 一、普通数组去重 方法一:遍历数组法 方法二:排序法 方法三:对象法 对象数组去重 方法一:将对象数...

  • javascript数组去重,数组对象去重

    利用Reduce去重 function unique(arr) {var obj = {};arr = arr.r...

  • js:数组去重

    数组去重的常见写法: 数组去重封装成方法: es6的数组去重(Array.from):

  • ES6数组去重

    普通数组去重 方法1 方法2 对象数组去重

  • js reduce去重用法

    reduce不仅仅可以数据累加,还可以实现去重效果。 重复次数计算 数组去重 数组对象去重,转为数组 对象去重

  • 数组去重

    传统方法 ES6 扩展 传统方法 最后再写到 Array.prototype 原型中

  • 数组去重

    老题了。。虽然网上一搜一大堆,还是自己想了想,自己动笔写了几种。

网友评论

      本文标题:数组去重

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