1.栈方法

  ECMAScript 提供了一些让数组行为类似其他数据结构的方法

栈是一种后进先出(LIFO)的数据结构,也就是最新添加的项最早被移除;而栈中数据的添加和删除只发生在栈的顶部

数组可以对其进行模拟,ECMAScript专门提供了push 和pop方法

(1)push()接受参数,将参数添加到数组尾部,返回修改后数组长度

   (2)pop() 直接取得数组的最后一项并移除,修改数组长度,返回被移除的项,即最后一项

2.队列方法

  队列是一种先进先出的结构(FIFO),要模拟队列,必须取得数组的第一项,最先添加的项最早被移除

 ECMAScript提供了一个shift()方法,取得数组第一项并移除

var arr = [1,2,3]

  arr.shift() //返回1

arr.length // 2

  结合shift()和push()方法,便可以像队列一样使用数组

同时,有了shift,自然会想到unshift(),该方法向数组的开头添加项,并返回数组长度

  var count = arr.unshift(1,3) // 返回 4  数组变为[1,3,2,3]

3.重排序方法

  (1)reverse()方法,反转数组,修改了原数组

    var values = [1,2,3]

    values.reverse()

    values // [3,2,1]

  (2)sort()方法, 对数组排序,返回排序完的数组,修改了原数组

    排序原理,sort会调用每个数组项的toString()方法,然后比较得到的字符串排序,即使数组每一项是数值,比较的还是字符串

    var values = [0,1,5,10,15]

    values.sort()

    values // [0,1,10,15,5]   ;字符串比较时,10位于5前面,  所以不完美

    

    要达到数字比较,最好给sort传入一个比较函数

    如 function compare (value1,value2) {

      if(value1 < value2) return -1;

      else if(value1 > value2) return 1;

      else { return 0;}

    }

调用values.sort(compare) 可返回正确顺序

4.操作方法

(1)concat()方法;首先基于当前数组创建一个副本(新数组),不改变原数组

  参数可选,若没有参数,则复制当前数组返回副本

  若有参数,则将参数添加到副本末尾,参数为数组,将数组每一项加至末尾

(2)slice()方法,基于数组中的一至多个项创建新数组,不改变原数组

  接受一到两个参数,若有两个参数,分别标志返回项起始位置和结束位置;但结束位置项不加入返回项;若只有一个参数,则返回起始位置到结尾的所有项

  var arr = [1,2,3,4];

  var arr1 = arr.slice(1);   // [2,3,4]

  var arr2 = arr.slice(1,3)  // [2,3]

(3)splice()方法  三种用法 ; 返回被删除的项,若没有,则返回空数组,会修改原数组

  <1 接收两个参数,表示删除,标志要删除的第一项和项数 splice(0,2) 从起始位置删除两项

<2 接收三个参数,表示先删除,再插入

   splice(2,0,'red','blue') 从第三项开始删除0项,再从第三项开始插入两项

     splice(2,1,'zzz') 从第三项开始删除一项,并插入zzz  也相当于完成了替换作用

5.位置方法

(1)indexOf()  从前往后找,接收参数 要查找的项 和 查找起始位置索引(可选的)

  若查找成功,返回结果所在位置索引,失败返回-1

  查找时使用全等操作符 ('===')

例如: var person = {name : 'bob'};

    var people = [{name: 'bob'}];

    person.indexOf(person)   //  -1

    var morePeople = [person];

    morePeople.indexOf(person)  // 0

(2)lastIndexOf()与indexOf 一致,只是从后往前找

6.迭代方法 ,接受三个参数(该数组项的值item,该数组项索引index,数组本身array)

(1)every() 对数组中每一项运行给定函数,若每一项都返回true,则返回true

(2)filter() 对数组中每一项运行给定函数,返回以返回值为true的项组成的数组

(3)forEach() 对数组中每一项运行给定函数,无返回值

(4)map() 对数组中每一项运行给定函数,返回以返回值组成的数组

(5)some() 对数组中每一项运行给定函数,只要有一项返回true,则返回true

7.归并方法

(1)reduce() 接受一个函数和一个可选的初始值,从第一项开始遍历到最后

函数接收四个参数(前一个值,当前值,项的索引,数组对象)

例如:

var values = [1,2,3,4,5];

var sum = values.reduce(function(prev,cur,index,array){

  return prev + cur;

})

alert(sum) // 15

第一次 prev为1 cur 为2 第二次,prev为3(1+2的结果),cur为3(数组第三项)

(2)reduceRight() 和reduce类似,只不过是反向遍历

JS 数组方法的更多相关文章

  1. js 数组方法比较

    js 数组方法比较 table th:first-of-type { width: 80px; } table th:nth-of-type(2) { width: 120px; } table th ...

  2. js数组方法详解

    Array对象的方法-25个 /*js数组方法详解 */ /* * 1 concat() 用于连接多个数组或者值-------------- * 2 copyWithin() 方法用于从数组的指定位置 ...

  3. 转载收藏(js数组方法大全)

    js数组方法大全 JavaScript中创建数组有两种方式 (一)使用 Array 构造函数: var arr1 = new Array(); //创建一个空数组var arr2 = new Arra ...

  4. js数组方法大全(上)

    # js数组方法大全(上) 记录一下整理的js数组方法,免得每次要找方法都找不到.图片有点多,注意流量,嘻嘻! 本期分享 join() reverse() sort() concat() slice( ...

  5. js数组方法大全(下)

    # js数组方法大全(下) 记录一下整理的js数组方法,免得每次要找方法都找不到.图片有点多,注意流量,嘻嘻! 本期分享 forEach() map() filer() every() some() ...

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

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

  7. 几个关于js数组方法reduce的经典片段

    以下是个人在工作中收藏总结的一些关于javascript数组方法reduce的相关代码片段,后续遇到其他使用这个函数的场景,将会陆续添加,这里作为备忘. javascript数组那么多方法,为什么我要 ...

  8. js数组方法详解(最新最全)

    数组是js中最常用到的数据集合,其内置的方法有很多,熟练掌握这些方法,可以有效的提高我们的工作效率,同时对我们的代码质量也是有很大影响.本文所有的栗子都是在es7环境下测试的,如果有问题欢迎留言交流 ...

  9. js数组方法解析

    js 数组有很多方法,其中有的常用,有的不常用,归纳几个常用的方法,做个总结: 1. 转换方法: 1.1 valueOf():调用这个方法会返回数组本身 <script> var arr ...

  10. js数组方法

    数组方法清空数组1: arr.length=02: arr=[]arr.push()//往数组最后一个添加元素,会待会一个返回值,就是新的数组长度arr.unshift()//往数组的第一个添加元素, ...

随机推荐

  1. ZOJ 3785 What day is that day?(数论:费马小定理)

    What day is that day? Time Limit: 2 Seconds      Memory Limit: 65536 KB It's Saturday today, what da ...

  2. tempalte模板

    tempalte模板层: 功能:为了更有逻辑的将数据库中的数据渲染到模板中: 模拟数据源: DB = [ {"hostname":"c1.com"," ...

  3. CMD批处理——forfiles命令使用,自动删除过期备份文件

    公司服务器用来备份数据的硬盘过段时间就会被备份文件占满,弄得我老是要登录到服务器去手工删除那些老的文件,有时忘记了就会导致硬盘空间不足而无法备份.因为只要保留最近几天的备份,如果可以做一个批处理让系统 ...

  4. webpack学习笔记--其它配置项

     其它配置项 除了前面介绍到的配置项外,Webpack 还提供了一些零散的配置项.下面来介绍它们中常用的部分. Target JavaScript 的应用场景越来越多,从浏览器到 Node.js,这些 ...

  5. 10本Java架构师必读书籍

    1.大型网站系统与JAVA中间件实践 本书围绕大型网站和支撑大型网站架构的Java中间件的实践展开介绍. 从分布式系统的知识切入,让读者对分布式系统有基本的了解:然后介绍大型网站随着数据量.访问量增长 ...

  6. noip2017逛公园

    题解: 之前知道正解并没有写过.. #include <bits/stdc++.h> using namespace std; #define rint register int #def ...

  7. js与jquery常用数组方法总结

    昨天被问数组方法的时候,问到sort()方法是否会改变原来的数组.本来我猜是不会,也是这么说,马上我又觉得,知识这种东西,不确定的时候直接说不确定或不知道就好,只是凭借着不确定的猜测或者是记忆,害人害 ...

  8. 不同网段无法加载ArcGIS Server发布服务解决方法

    问题描述: ArcGIS Server 10发布的服务, (1)在相同网段的Desktop9.3和Engine 9.3程序下可以正常显示, (2)在不同网段Desktop9.3和Engine 9.3程 ...

  9. ERROR 000732:Output Geodatabase:Dataset Database Connections\Connection to localhost.sde\SDE.Dataset does not exist or is not supported

    ArcCatalog 10中向SDE 数据集导入要素类时,出错:ERROR 000732:Output Geodatabase:Dataset Database Connections\Connect ...

  10. HDU4858 项目管理 其他

    原文链接https://www.cnblogs.com/zhouzhendong/p/HDU4858.html 题目传送门 - HDU4858 题意 给定一个无向图 $n$ .有 $m$ 条边. 每一 ...