zoukankan      html  css  js  c++  java
  • js数组去重,排序的几种方法

    去重:

    1,arr.splice

    var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5,5,5,5];

    function norepeat(arr) {

      var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5,5,5,5];
      function norepeat(arr) {
          for(var i = 0; i < arr.length-1; i++){
              for(var j = i+1; j < arr.length; j++){
                if(arr[i]==arr[j]){
                 arr.splice(j,1);
                  j--;
                }
              }
          }
        return arr;
      }
    var arr2 = norepeat(arr);
    console.log(arr2); //[1, 23, 3, 5, 6, 7, 9, 8]

    }
    var arr2 = norepeat(arr);
    console.log(arr2); //[1, 23, 3, 5, 6, 7, 9, 8]

    2,  .借助新数组,判断新数组中是否存在该元素如果不存在则将此元素添加到新数组中(原数组长度不变但被按字符串顺序排序)

       var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
            console.log(arr); 
            function norepeat(arr){
                var temp=[];
                var end;       //临时变量用于对比重复元素
                arr.sort();
                end=arr[0];
                temp.push(arr[0]);
                for(var i=1;i<arr.length;i++){
                    if(arr[i] !=end){   //当前元素如果和临时元素不等则将此元素添加到新数组中
                        temp.push(arr[i])
                        end=arr[i]
                    }
                }
                return temp;
            }
        var arr2=norepeat(arr);
        console.log(arr2);   //[1, 23, 3, 5, 6, 7, 8, 9]
    3,创建一个新数组,判断新数组中是否存在该元素如果不存在则将此元素添加到新数组中
     var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
            console.log(arr); 
            function norepeat(arr){
                var temp =[];
                for(var i=0;i<arr.length;i++){
                    if(temp.indexOf(arr[i]) == -1){
                        temp.push(arr[i]);
                    }
                }
                return temp;
            }
        var arr2=norepeat(arr);
        console.log(arr2);//[1, 23, 3, 5, 6, 7, 9, 8]
    4,借助indexOf()方法判断此元素在该数组中首次出现的位置下标与循环的下标是否相等
     var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5,5,5];
       console.log(arr);    
       function norepeat(arr) {
           for (var i = 0; i < arr.length; i++) {
               if (arr.indexOf(arr[i]) != i) {
                   arr.splice(i,1);//删除数组元素后数组长度减1后面的元素前移
                   i--;//数组下标回退
               }
           }
           return arr;
       }
       var arr2 = norepeat(arr);
       console.log(arr2);                 //[1, 23, 3, 5, 6, 7, 9, 8]
    5,利用数组中的filter方法
     var arr = ["apple","banana","pear","apple","orange","orange"];
       console.log(arr);
       var arr2 =arr.filter(function(value,index,self){
           return self.indexOf(value) ===index;
       });
       console.log(arr2);   //["apple", "banana", "pear", "orange"]

    排序:

    sort,for循环嵌套,比较交换位置

    urn b-a})//降序

    如上,使用数字对数组进行排序,就需要通过一个函数作为参数来调用。

    对象数组:

    使用场景——已知某品牌门店列表数据(含距当前位置的距离),需要按距离由仅及远排序,具体实现方法如下:

    复制代码
    var shoplist = [{
      "name": "上塘中海锦城",
      "distance": 14307.0275
    }, {
      "name": "汉堡王深圳华强北店",
      "distance": 16606.5901
    }, {
      "name": "汉堡王深圳蔡屋围店",
      "distance": 18062.4395
    }, {
      "name": "汉堡王深圳金丰城店",
      "distance": 18468.4439
    }, {
      "name": "汉堡王深圳地王店",
      "distance": 18484.8283
    }, {
      "name": "汉堡王深圳龙岗宝能店",
      "distance": 39006.9269
    }, {
      "name": "汉堡王深圳龙华绿景香颂店",
      "distance": 15356.4863
    }, {
      "name": "汉堡王深圳西荟城店",
      "distance": 24990.1325
    }, {
      "name": "汉堡王深圳魅力时代店",
      "distance": 8228.8474
    }, {
      "name": "汉堡王深圳福华三路店",
      "distance": 12693.439
    }]
    shoplist.sort((a, b) => {
      return a.distance - b.distance
    })
    复制代码

    如上,关键代码就一句: 

    shoplist.sort((a,b)=>{return a.distance-b.distance})

    简单分析不难发现,这跟上面数字数组排序用法是一样的,只不过是这里使用了数组中对象元素的 distance 这一数字字段进行比较排序的。

    经过排序后的数据如下图,门店列表已经按距离字段进行升序排列,根据这些排序后的数据进行展示就OK了:

    反序排序:

    与上面排序不同,反转排序方法 reverse() 将一个数组中的元素的顺序反转排序。

    这个方法单独使用的场景不多,但是结合sort()排序方法使用的场景比较多一些,特别是对于一些复杂的数组。

    如网上商城商品搜索列表页面的正序、反序,有根据价格的,有根据销量的,还有根据评价的,如果单单是正序,或者是排序,那么直接用sort()方法就好了。但如果正序排序之后又需要进行反序排列,那么直接用reverse()进行反转就OK了,没必要再用sort()进行反序排列,无论是在写法上,还是计算速度上都要快好多的:

    //1. sort()进行反序
    shoplist.sort((a,b)=>{return b.distance-a.distance})
    //2. reverse()反序
    shoplist.reverse()
  • 相关阅读:
    将Moba的输出导出为文件
    MyBatis入参为0时失效问题
    (笔记)交大电院MEM提前面试优秀经验分享【附面试流程及规则】
    (笔记)GPIO基本原理与寄存器配置(STM32篇)
    (笔记)高速电路板完美走线的诀窍
    使用 python 收集 kubernetes events 并写入 elasticsearch
    java使用io.kubernetes.client-java调用k8s api创建pod/service/ingress示例
    中英文逗号空格分隔符正则式
    SpringCloud学习一-搭建netflix-eureka微服务集群
    Spring 中经典的 9 种设计模式,打死也要记住啊!
  • 原文地址:https://www.cnblogs.com/zwjun/p/12740301.html
Copyright © 2011-2022 走看看