• js数组去重


    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
    </head>
    <body>
      <h3>数组去重的方法</h3>
    </body>
    <script>
      var arr = [
        1,1,'1','1',true,true,'true','true',false,
        'false',undefined,undefined,'undefined','undefined',
        null,null,NaN,NaN,'NaN',0,0,'0',{},{},
      ];
    // 第1//ES6 Set去重(ES6中最常用)
        //Array.from()方法就是将一个类数组对象或者可遍历对象转换成一个真正的数组。
        //所谓类数组对象,最基本的要求就是具有length属性的对象。
        //set(es6提供新数据结构,类似数组,但成员值都是唯一的)。
        //方法:添加成员返回set本身add(value),删除成员返回布尔值表示是否删除成功delete(value),返回布尔值判断是否为set成员has(value),清除所有成员无返回值clear()
        //注:set内部两个NaN相等,两个对象总是不相等的,去重不了{}对象
        // function unique1(arr) {
        //   return Array.from(new Set(arr))
        // }
        // console.log(unique1(arr));
    // 第2for嵌套for
        // NaN和{}没有去重,null直接都消失了
        // function unique2(arr){
        //   for(var i=0;i<arr.length;i++){
        //     for(var j=i+1;j<arr.length;j++){
        //       if(arr[i]==arr[j]){
        //         arr.splice(j,1);
        //         j--;
        //       }
        //     }
        //   }
        //   return arr;
        // }
        // console.log(unique2(arr));
    // 第3indexOf
        //indexOf,如果检测结果没有匹配值返回-1,匹配到返回1
        //NaN 和{}没有去重
        // function unique3(arr) {
        //     if(!Array.isArray(arr)){
        //       console.log('type error');
        //       return
        //     }
        //     var array = [];
        //     for(var i=0;i<arr.length;i++){
        //       if(array.indexOf(arr[i]) === -1){
        //         array.push(arr[i]);
        //       }
        //     }
        //     return array;
        // }
        // console.log(unique3(arr));
    // 第4sort()排序方法
        //对排序结果遍历相邻元素对比
        //NaN 和{}没有去重
        // function unique4(arr) {
        //   if(!Array.isArray(arr)){
        //       console.log('type error');
        //       return
        //   }
        //   arr = arr.sort();
        //   var array = [arr[0]];
        //   for(var i=1;i<arr.length;i++){
        //     if(arr[i]!==arr[i-1]){
        //       array.push(arr[i])
        //     }
        //   }
        //   return array;
        // }
        // console.log(unique4(arr));
    // 第5利用对象的属性不能相同的特点进行去重
        //两个true都去掉了,但其他都成功了
        // function unique5(arr) {
        //   if(!Array.isArray(arr)){
        //   console.log('type error');
        //   return
        //   }
        //   var array = [];
        //   var obj = {};
        //   for(var i=0;i<arr.length;i++){
        //     if(!obj[arr[i]]){
        //       array.push(arr[i]);
        //       obj[arr[i]] = 1;
        //     }else{
        //       obj[arr[i]]++;
        //     }
        //   }
        //   return array;
        // }
        // console.log(unique5(arr));
    // 第6,includes检测数组是否有某个值返回布尔值(es6)
        //{}没有去重
        // function unique6(arr) {
        //   if(!Array.isArray(arr)){
        //     console.log('type error');
        //   return
        //   }
        //   var array = [];
        //   for(var i=0;i<arr.length;i++){
        //     if(!array.includes(arr[i])){
        //       arr.push(arr[i]);
        //     }
        //   }
        //   return array;
        // }
        // console.log(unique6(arr));
    // 第7hasOwnProperty
        //hasOwnProperty判断对象是否存在属性
        //所有的都去重了
        function unique7(arr) {
          var obj = {};
          return arr.filter(function(item,index,arr){
            return obj.hasOwnProperty(typeof item + item)?false:(obj[typeof item + item] = true)
          })
        }
        console.log(unique7(arr));
    // 第8利用filter
        //对象未去重,NaN都被去掉了
        // function unique8(arr){
        //   return arr.filter(function(item,index,arr){
        //     return arr.indexOf(item,0) === index;
        //   })
        // }
        // console.log(unique8(arr));
    // 第9,递归去重
        //NaN和{}未去重
        // function unique9(arr) {
        //   var array = arr;
        //   var len = array.length;
        //   array.sort(function(a,b){
        //     return a+b;
        //   })
        //   function loop(index){
        //     if(index >=1){
        //       if(array[index] === array[index-1]){
        //         array.splice(index,1);
        //       }
        //       loop(index-1);
        //     }
        //   }
        //   loop(len-1);
        //   return array;
        // }
        // console.log(unique9(arr));
    // 第10,Map数据结构去重
        //{}未去重
        // function unique10(arr) {
        //   let map = new Map();
        //   let array  =new Array();
        //   for(let i=0;i<arr.length;i++){
        //     if(map.has(arr[i])){
        //       map.set(arr[i],true);
        //     }else{
        //       map.set(arr[i],false);
        //       array.push(arr[i]);
        //     }
        //   }
        //   return array;
        // }
        // console.log(unique10(arr));
    </script>
    </html>
  • 相关阅读:
    父子组件双向通讯
    高德地图采坑实践之文本标记点击事件左半边不生效(已解决)
    高德地图 location字段控制台显示 为字符串类型 实际为对象
    允许长单词、数字、URL换行到下一行
    python 格式化输出详解(占位符:%、format、f表达式)——上篇 理论篇
    python tkinter实现俄罗斯方块 基础版
    python递归三战:Sierpinski Triangle、Tower of Hanoi、Maze Exploring
    python(pygame)滑稽大战(类似飞机大战) 教程
    编辑器测试-TinyMCE
    封装cookie localStorage sessionStorage
  • 原文地址:https://www.cnblogs.com/forever-xuehf/p/12820398.html
Copyright © 2020-2023  润新知