本文介绍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的元素

JS数组中级+高级技巧的更多相关文章

  1. 小兔JS教程(四)-- 彻底攻略JS数组

    在开始本章之前,先给出上一节的答案,参考答案地址: http://www.xiaotublog.com/demo.html?path=homework/03/index2 1.JS数组的三大特性 在J ...

  2. js数组学习整理

    原文地址:js数组学习整理 常用的js数组操作方法及原理 1.声明数组的方式 var colors = new Array();//空的数组 var colors = new Array(3); // ...

  3. 转→js数组遍历 千万不要使用for...in...

    看到一篇内容还不错,但是排版实在糟糕, 逼死强迫症患者啊,直接拉下去找原文连接,找到了,但是已经消失了···500错误... 第一次因为实在看不下去一篇博客的排版, 为了排版而转载... 转载地址:h ...

  4. js数组操作大全

    原文(http://www.cnblogs.com/webhotel/archive/2010/12/21/1912732.html) 用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简 ...

  5. js数组去重的4种方法

    js数组去重,老生长谈,今天对其进行一番归纳,总结出来4种方法 贴入代码前 ,先对浏览器Array对象进行支持indexOf和forEach的polyfill Array.prototype.inde ...

  6. js 数组处理函数

    本文转载自有有<js 数组处理函数> concat 将参数列表连接到原数组后面形成一个新的数组并返回,原有数组不受影响. var arr = ["a","b& ...

  7. js 数组赋值问题 :值传递还是引用?

    转载于知乎var a = [1,2,3]; var b = a; a = [4,5,6]; alert(b); //[1,2,3] 面试时被问到这样一个问题,竟然从来没试过... 当时直接的理解,数组 ...

  8. JS数组方法汇总 array数组元素的添加和删除

    js数组元素的添加和删除一直比较迷惑,今天终于找到详细说明的资料了,先给个我测试的代码^-^ var arr = new Array(); arr[0] = "aaa"; arr[ ...

  9. js数组操作

    用 js有很久了,但都没有深究过js的数组形式.偶尔用用也就是简单的string.split(char).这段时间做的一个项目,用到数组的地方很多, 自以为js高手的自己居然无从下手,一下狠心,我学! ...

随机推荐

  1. Openstack(十六)实现内外网结构

    类似于阿里云ECS主机的内外网(双网卡不通网段)的结构,最终实现内外网区分隔离. https://www.aliyun.com/product/ecs/?utm_medium=text&utm ...

  2. <option> 标签的 value 属性

    <html> <body> <form action="/example/html/form_action.asp" method="get ...

  3. (21)纹理缓存(Texture Cache)

    简介 纹理缓存是将纹理缓存起来方便之后的绘制工作.每一个缓存的图像的大小,颜色和区域范围都是可以被修改的.这些信息都是存储在内存中的,不用在每一次绘制的时候都发送给GPU. CCTextureCach ...

  4. (15)如何使用Cocos2d-x 3.0制作基于tilemap的游戏:第三部分(完)

    引言 程序截图: 在第二部分教程中,Ray教大家如何在地图中制作可碰撞的区域,如何使用tile属性,如何制作可以拾取的物品以及如何动态修改地图.如何使用“Heads up display”来显示分数. ...

  5. zw版【转发·台湾nvp系列Delphi例程】HALCON SetIcon2

    zw版[转发·台湾nvp系列Delphi例程]HALCON SetIcon2 procedure TForm1.Button1Click(Sender: TObject);var img : HUnt ...

  6. 学号20155308 2016-2017-2 《Java程序设计》第7周学习总结

    学号20155308 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 第十二章 使用Optional代替null 标准API的函数接口 API 功能 Cons ...

  7. OpenResty api 网关

    1,Orange网关 Orange是一个基于OpenResty的API网关.除Nginx的基本功能外,它还可用于API监控.访问控制(鉴权.WAF).流量筛选.访问限速.AB测试.动态分流等.它有以下 ...

  8. mongo数据库连接工具类(C#)

    Framework版本:.Net Framework 4 using System; using System.Collections.Generic; using System.Linq; usin ...

  9. HDU1087

    /*记忆化dfs+dp,因为每次最多走k步,所以上下左右的方向有所扩展, dp[i][j]存的是从dp[i][j]出发能吃的最大个数*/ #include<stdio.h> #includ ...

  10. Python面试题目之字典排序

    按照字典的内的年龄排序 待排序的字典 d1 = [ {'name':'alice', 'age':38}, {'name':'bob', 'age':18}, {'name':'Carl', 'age ...