JS 数组方法
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 数组方法的更多相关文章
- js 数组方法比较
js 数组方法比较 table th:first-of-type { width: 80px; } table th:nth-of-type(2) { width: 120px; } table th ...
- js数组方法详解
Array对象的方法-25个 /*js数组方法详解 */ /* * 1 concat() 用于连接多个数组或者值-------------- * 2 copyWithin() 方法用于从数组的指定位置 ...
- 转载收藏(js数组方法大全)
js数组方法大全 JavaScript中创建数组有两种方式 (一)使用 Array 构造函数: var arr1 = new Array(); //创建一个空数组var arr2 = new Arra ...
- js数组方法大全(上)
# js数组方法大全(上) 记录一下整理的js数组方法,免得每次要找方法都找不到.图片有点多,注意流量,嘻嘻! 本期分享 join() reverse() sort() concat() slice( ...
- js数组方法大全(下)
# js数组方法大全(下) 记录一下整理的js数组方法,免得每次要找方法都找不到.图片有点多,注意流量,嘻嘻! 本期分享 forEach() map() filer() every() some() ...
- JS数组方法汇总 array数组元素的添加和删除
js数组元素的添加和删除一直比较迷惑,今天终于找到详细说明的资料了,先给个我测试的代码^-^ var arr = new Array(); arr[0] = "aaa"; arr[ ...
- 几个关于js数组方法reduce的经典片段
以下是个人在工作中收藏总结的一些关于javascript数组方法reduce的相关代码片段,后续遇到其他使用这个函数的场景,将会陆续添加,这里作为备忘. javascript数组那么多方法,为什么我要 ...
- js数组方法详解(最新最全)
数组是js中最常用到的数据集合,其内置的方法有很多,熟练掌握这些方法,可以有效的提高我们的工作效率,同时对我们的代码质量也是有很大影响.本文所有的栗子都是在es7环境下测试的,如果有问题欢迎留言交流 ...
- js数组方法解析
js 数组有很多方法,其中有的常用,有的不常用,归纳几个常用的方法,做个总结: 1. 转换方法: 1.1 valueOf():调用这个方法会返回数组本身 <script> var arr ...
- js数组方法
数组方法清空数组1: arr.length=02: arr=[]arr.push()//往数组最后一个添加元素,会待会一个返回值,就是新的数组长度arr.unshift()//往数组的第一个添加元素, ...
随机推荐
- MySQL表按月切割
按月份切割MySQL表数据: 千万级别的数据量也可在毫秒内完成切割操作 注:数据无价请提前自行备份 #!/bin/bash USERNAME=MySQL_user PASSWORD=MySQL_pwd ...
- 494. Target Sum
You are given a list of non-negative integers, a1, a2, ..., an, and a target, S. Now you have 2 symb ...
- linux操作系统中oracle数据库的密码过期问题解决
1:首先确定linux登录的用户是root 切换到数据库用户 su oracle(切记,如果这里su oracle不可以,那么就使用此命令su - oracle,这个命令切换到数据库用户肯定可以成功. ...
- 错误 java.lang.ClassCastException: com.xx cannot be cast to ResourceBundle
出现错误: java.lang.ClassCastException: com.xxx cannot be cast to ResourceBundle 百度搜索错误,没有结果.谷歌搜索:http:/ ...
- 考虑实现一个不抛异常的swap
Effective C++:参考自harttle land 类的swap实现与STL容器是一致的:提供swap成员函数, 并特化std::swap来调用那个成员函数. class Widget { p ...
- 【总结】瞬时高并发(秒杀/活动)Redis方案(转)
转载地址:http://bradyzhu.iteye.com/blog/2270698 1,Redis 丰富的数据结构(Data Structures) 字符串(String) Redis字符串能包含 ...
- 【bzoj3174】[Tjoi2013]拯救小矮人
题解: 这题非常容易想到一个错误的贪心 就是按照ai排序 然后尽量取ai小的 但是有很明显的问题就是如果取了小的ai 那会导致那些原本可能存在这些ai就可以去掉的大的人因此不能取了 而有可能可以先去取 ...
- lrzsz linix 远程文件传输工具。
安装方法 #yum install lrzsz -y 使用方法 #rz -y 上传指定文档到当前目录
- Spring boot自定义启动字符画(banner)
spring boot项目启动时会打印spring boot的ANSI字符画,可以进行自定义. 如何自定义 实现方式非常简单,我们只需要在Spring Boot工程的/src/main/resourc ...
- rxjs简单入门
rxjs全名Reactive Extensions for JavaScript,Javascript的响应式扩展, 响应式的思路是把随时间不断变化的数据.状态.事件等等转成可被观察的序列(Obser ...