zoukankan      html  css  js  c++  java
  • 简单类型数组去重的若干方法

    var arr = [1, 3, 5, 2, 2, 5, 6, 7, 8, 3, 4, 5, 6, 8, 9, 6]

    1. 利用两个数组,遍历源数组和目标数组中,目标数组中存在这个元素,则不添加, 不存在则添加
     function uniqueArr(array) {
          var _arr = [],
            isRepeat;
          for(var i = 0; i < array.length; i++) {
            isRepeat = false;
            for(var j = 0; j < _arr.length; j++) {
              if(_arr[j] == array[i]) {
                isRepeat = true;
                break;
              }
            }
            if(!isRepeat) {
              _arr.push(array[i])
            }
          }

          return _arr;
        }
    2. 双重遍历原数组,第一层遍历所有的,第二层从i+1开始遍历, 第二层的数组不存在与第i位重复的,则将这个元素存到目标数组中
        function uniqueArr(array) {
          var _arr = [],
            isRepeat;
          for(var i = 0; i < array.length; i++) {
            isRepeat = false;
            for(var j = i + 1; j < array.length; j++) {
              if(array[j] == array[i]) {
                isRepeat = true;
                break;
              }
            }
            if(!isRepeat) {
              _arr.push(array[i])
            }
          }

          return _arr;
        }
    3. 利用数组的filter方法和indexOf方法,这个方法非常巧妙,indexOf会返回这个元素第一次出现的下标,如果这个下标刚好为filter遍历的index, 则说明这个元素第一次出现,可以返回
        function uniqueArr(array) {
          return array.filter((item, index) => array.indexOf(item) === index)
        }

        function uniqueArr(array) {
          var _arr = [];

          array.forEach(item => {
            if(_arr.indexOf(item) < 0) {
              _arr.push(item)
            }
          });

          return _arr;
        }

    4. 利用sort和遍历,先将数组排序,排序后的数组,相同的元素会排在一起,我们只要找出相邻的元素为不同的元素,将左边的元素push到目标数组中则可以。
        function uniqueArr(array) {
          var _arr = [];
          array.sort();
          for(var i = 0; i < array.length; i++) {
            if(array[i] !==array[i+1]) {
              _arr.push(array[i])
            }
          }
          return _arr;
        }

    5. 利用sort和遍历,先将数组排序,排序后的数组,相同的元素会排在一起, 我们遍历原数组中,找出和目标数组中最后一位不同的元素就可以了
        function uniqueArr(array) {
          var _arr = [];
          array.sort();
          for(var i = 0; i < array.length; i++) {
            if(array[i] !== _arr[_arr.length - 1]) {
              _arr.push(array[i])
            }
          }
          return _arr;
        }

        // es6 
    indexOf和includes区别:
    indexOf: 返回元素位置,对NaN无效, eg: arr = [1, NaN, 2], arr.indexOf(NaN) // -1
    includes:返回true和false
    6. 利用es6的includes方法, 遍历原数组,将不存在于目标数组中的元素push进目标数组中就可以
        function uniqueArr(array) {
          var _arr = [];

          array.forEach(item => {
            if(!_arr.includes(item)) {
              _arr.push(item)
            }
          })
          return _arr;
        }
    7. 先用sort排序,通过数组的reduce方法归纳数组,将prev数组的最后一位与原数组比较, 不同就可以留下,这个方法与方法5类似
    function uniqueArray(array) {
      array.sort()
      return array.reduce((prev, item, index) => {
        if (prev[prev.length - 1] !== item) {
          prev.push(item);
        }
        return prev;
      }, [])
    }
    
    8. 利用map的string key的唯一性,将数组元素作为map的key去重 function uniqueArray(array) {
    var _arr = [], map = new Map(); for (var i = 0; i < array.length; i++) { if (!map.get(array[i])) { map.set(array[i], 1) _arr.push(array[i]) } } return _arr }
    9. 利用object的string key的唯一性,将数组元素作为map的key去重 function uniqueArray(array) {
    var _arr = [], obj = {}; for (var i = 0; i < array.length; i++) { if (!obj[array[i]]) { obj[array[i]] = 1; _arr.push(array[i]) } } return _arr } 10. 利用set的元素唯一性,set中没有重复的元素 function uniqueArray(array) { return Array.from(new Set(array)) } console.log(uniqueArray(arr))
  • 相关阅读:
    解决ListView异步加载数据之后不能点击的问题
    android点击实现图片放大缩小 java技术博客
    关于 数据文件自增长 的一点理解
    RAC 实例不能启动 ORA1589 signalled during ALTER DATABASE OPEN
    Linux 超级用户的权利
    RAC 实例 迁移到 单实例 使用导出导入
    Shell 基本语法
    Linux 开机引导与关机过程
    RAC 实例不能启动 ORA1589 signalled during ALTER DATABASE OPEN
    Oracle RAC + Data Guard 环境搭建
  • 原文地址:https://www.cnblogs.com/ycherry/p/15150889.html
Copyright © 2011-2022 走看看