• JS数组中级+高级技巧


    本文介绍JS数组一些比较进阶的方法:

    reverse:数组反转;

    join:(参数)以参数为连接符将数组拼接为字符串;

    实例:

    var arr=[];

    arr[3]="haha";

    console.log(arr.join("a"));//输出:aaahaha;    arr[3]实际上定义了数组长度为4且前3项都为undifided, 因此join("a")则为:空 +a+空+ a 空+ a+ haha

    配合字符串split方法实现字符串反转:

    String.prototype.reverse=function () {
          return this.split("").reverse().join("");
    }

    快速生成累加数组:

    for (var i = 1, arr=[]; arr.push(i++)<10;) ; 

    console.log(arr);//[1,2,3,4,5,6,7,8,9,10]//   将10修改为需要的数字即可

    数组排序:

    var arr=[1,13,500,70]

    最大值:Math.max.apply(null,arr);//500

    最小值:Math.min.apply(null,arr);  //1

    排序:从大到小:arr.sort((a,b)=>b-a)   或者   arr.sort(function(a,b){return b-a});

       从小到大::arr.sort((a,b)=>a-b)   或者   arr.sort(function(a,b){return a-b});

       随机排序arr.sort(function(){return Math.random()-0.5});

      双重标准排序

    例子1:要求:将arr按num大小排序,如果num相同则以time时间较新的排序

    var arr= [
        {name:'qqq', num:2,time:'2015-06-08 13:44:18'},
        {name:'www', num:3,time:'2015-06-08 13:44:18'},
        {name:'eee', num:4,time:'2015-06-07 13:40:18'},
        {name:'rrr', num:4,time:'2015-06-08 13:44:18'},
        {name:'yyy', num:6,time:'2015-06-07 13:40:18'},
    ];

    arr.sort((a,b)=>a.num==b.num?Date.parse(b.time)-Date.parse(a.time):b.num-a.num)

    例子2:要求:将arr按每一项中的数字从小到大排序

    var arr=["那你dasda1222","哈哈哈das32dasdsa","纳尼8888dasdsadas","aaa333"];

    arr.sort((a,b)=>a.match(/d/) - b.match(/d/))

    或者arr.sort(function(a,b){return a.match(/d/) - b.match(/d/)})

    数组去重:

    1 基本版本:  

    Array.prototype.unique = function() {

    // 创建一个新的临时数组,用于保存输出结果
    var n = [];


    for (var i = 0; i < this.length; i++) {
    // 如果当前数组的第i个元素已经保存进了临时数组,那么跳过,否则把当前项push到临时数组里面
    if (n.indexOf(this[i]) == -1) n.push(this[i]);
    }
    return n;
    }

    2 高效版

     Array.prototype.unique = function() {
            / / n为hash表,r为临时数组
          var n = {}, r = [];


          for (var i = 0; i < this.length; i++) {


          // 如果hash表中没有当前项

         if (!n[this[i]]) {

             n[this[i]] = true;

          // 把当前数组的当前项push到临时数组里面
          r.push(this[i]);
          }
       }
       return r;
    }

    3 简洁先进版

    Array.prototype.unique = function() {
           return this.filter((v, i) => this.indexOf(v) === i)
    }

     

    其他方法:var arr=[7,10,222]

    快速复制数组:var arr2=arr.slice();

    console.log(arr2);    //[7,10,222]

    console.log(arr2===arr)  //  false

    数组求和:

    arr.reduce(function (item,idx) {
           return  item+idx
    })

    数组过滤:var arr=["a",{name:"haha"},"1212","8"]

     arr. filter(function(item) {return typeof item == 'number'})  //去除类型不是Number的元素

  • 相关阅读:
    linux定时备份数据库
    svn 没有绿色小勾
    oracle dblink ora-12541 无监听
    WPS 设置多级标题
    sql 提高速度方法
    领骑衫获奖感言与总结
    团队项目(任务五):项目回顾
    项目回顾
    团队项目(任务四):第二次冲刺
    团队项目(任务三):第一次冲刺
  • 原文地址:https://www.cnblogs.com/zhengrunlin/p/5931692.html
Copyright © 2020-2023  润新知