基于JavaScript Array数组方法(新手必看篇)


Posted in Javascript onAugust 20, 2016

Array类型是ECMAScript中最常用的引用类型。ECMAScript中的数据与其它大多数语言中的数组有着相当大的区别。虽然ECMAScript中的数据与其它语言中的数组一样都是数据的有序列表,但不同的是,ECMAScript数组中的每一项可以保存任何类型的数据,无论是数值、字符串或者是对象。同时,ECMAScript中的数组大小是可以动态调整的,即可以根据数据的添加自动增长以容纳新增的数据。下面总结一下JavaScript中数组常用的操作函数及用法。

•创建数组

创建数组主要有构造函数和数组字面量两种方法,如下所示:

var arr = new Array(); 
var arr = [];

对于构造函数,我们可以传递一个数值创建包含给定项数的数组,如下:

var arr = new Array(3);  //数组长度为3

也可以直接传递存放于数组中的值,如下:

var arr = new Array("red","green","blue");

不论哪种方式,推荐使用数组字面量的形式来创建数组。

•检测数组

对于单一的全局执行环境而言,使用instanceof操作符就可以检测是否为数组,例如:

var arr = [1,2,3]; 
console.log(arr instanceof Array);  //true

但如果网页中包含多个框架,也就包含多个全局执行环境,ES5新增了Array.isArray()方法来确定某个值是否为数组,而不管它是在哪个全局执行环境中被创建的,如下:

if(Array.isArray(arr)){ 
    //执行某些操作 
}

•数组字符串转换

每个对象都具有toLocaleString()、toString()和valueof()方法。调用数组的toString()方法会返回数组中每个值的字符串形式拼接而成并且以逗号分隔的字符串,调用数组的valueof()方法返回的还是数组,实际上调用的是数组每一项的toString()方法,如下:

var arr = ["red","green","blue"]; 
console.log(arr.toString());  //red,green,blue 
console.log(arr.valueof());  //red,green,blue 
console.log(arr);       //red,green,blue

而调用数组的toLocaleString()方法,与toString()不同的是它会调用数组每一项的toLocaleString()方法,将每一项toLocaleString()方法的返回值以逗号分隔拼接成一个字符串。而使用join()方法,可以使用不同的分隔符来构建这个字符串,如下:

var arr = ["red","green","blue"]; 
console.log(arr.join(","));  //red,green,blue 
console.log(arr.join("||"));  //red||green||blue

•数组的添加和删除

push()方法接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改修改后数组的长度,例如:

var arr = [1,2,3]; 
arr.push(4,5); 
console.log(arr);  //[1,2,3,4,5]

与push()相对的是pop()方法,它从数组末尾移除最后一项,并返回移除的项,例如:

var arr = [1,2,3]; 
arr.pop();  //3 
arr.pop();  //2 
console.log(arr);  //[1]

另外两个使用的方法是shift()和unshift(),它们与pop()和push()类似,shift()方法用于从数组的起始位置移除项并返回移除项,例如:

var arr = [1,2,3]; 
arr.shift();  //1 
arr.shift();  //2 
console.log(arr);  //[3]

unshift()方法与shift()用途相反,它能够在数组前端添加任意个项并返回新数组的长度,例如:

var arr = [1,2,3]; 
arr.unshift(4);  //返回长度4 
arr.unshift(5);  //返回长度5 
console.log(arr);  //[1,2,3,4,5]

•数组的翻转与排序

数组提供的翻转方法为reverse(),它会反转数据项的顺序,例如:

var arr = [1,2,3]; 
arr.reverse(); 
console.log(arr);  //[3,2,1]

sort()也可以对数组进行排序,不过它的默认排序方式并不是大小,而是根据对应字符串逐个编码排序的。sort()方法可以接收一个比较函数,进行自定义排序,例如:

function compare(value1,value2){ 
  return value1-value2; 
} 
var arr = [1,3,2,5,4]; 
arr.sort(compare); 
console.log(arr);  //[1,2,3,4,5]

•数组连接

concat()方法会创建当前数组的一个副本,然后将接收到的参数添加到这个副本的末尾,最后返回新构建的数组,原来的数组不变,例如:

var arr = [1,2,3]; 
var arr2 = arr.concat(4,[5,6]); 
console.log(arr);  //[1,2,3] 
console.log(arr2);  //[1,2,3,4,5,6]

•数组分割

slice()方法接收一个或两个参数,即要返回项的开始位置和结束位置。如果只要一个参数,则返回从指定位置开始到数组结束的所有项。如果接收两个参数,则返回起始和结束位置之间的所有项但不包括结束位置的项,例如:

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

注意,slice()方法不会影响原来的数组。

•splice()方法

由于splice()方法非常强大,因此单独拿出来总结一下,它可以接收三个参数,第一个参数表示添加或删除项目的位置,第二个参数表示要删除的项目数量,第二个参数表示向数组中添加的新项目(可选),通过提供不同的参数可以实现删除、插入和替换等功能,例如:

var arr = [1,2,3,4,5]; 
arr.splice(2,0,11,22);  //从位置2插入两项,没有删除 
console.log(arr);  //[1,2,11,22,3,4,5] 
 
arr.splice(2,2,33,44);  //从位置2开始删除两项,插入两项,返回被删除的项 
console.log(arr);  //[1,2,33,44,4,5] 
 
arr.splice(1,1);  //从位置1开始删除1项,返回被删除的项 
console.log(arr);  //[1,33,44,4,5]

•数组的位置方法

ES5提供了两个位置方法:indexOf()和lastIndexOf()。这两个方法都接收两个参数:要查找的项和表示查找起点位置的索引(可选)。indexOf()方法从数组的开头向后查找,lastIndexOf()则从数组的末尾向前查找,例如:

var arr = [1,2,3,4,5,4,3,2,1]; 
console.log(arr.indexOf(4));  //3 
console.log(arr.lastIndexOf(4));  //5 
 
console.log(arr.indexOf(4,4));  //5 
console.log(arr.lastIndexOf(4,4));  //3

•数组的迭代方法

ES5定义了5种迭代方法,每个方法都接收两个参数:要在每一项上运行的函数和(可选)运行该函数的作用域对象--影响this的值。传入这些方法的函数可以接收三个参数:数组项的值、该项在数组中的索引和数组对象本身。

其中,every()方法和some()方法是相似的。对于every()方法来说,传入的函数必须对每一项都返回true,这个方法才返回true。而对于some(),传入的函数只要对数组中的任意一项返回true,该方法就返回true。例子如下:

var arr = [1,2,3,4,5,4,3,2,1]; 
var everyResult = arr.every(function(item,index,array){ 
  return (item>2); 
}); 
console.log(everyResult);  //false,并不是全部大于2 
 
var someResult= arr.some(function(item,index,array){ 
  return (item>2); 
}); 
console.log(someResult);  //true,某一项大于2即可

filter()方法根据给定的函数确定是否在返回的数组中包含某一项,例如:

var arr = [1,2,3,4,5,4,3,2,1]; 
var filterResult = arr.filter(function(item,index,array){ 
  return (item>2); 
}); 
console.log(filterResult);  //[3,4,5,4,3],返回所有数值都大于2的一个数组

map()方法对于数组中的每一项都会运行给定的函数,然后将每一项函数运行结果组成的数组返回,例如:

var arr = [1,2,3,4,5,4,3,2,1]; 
var mapResult = arr.map(function(item,index,array){ 
  return item*2; 
}); 
console.log(mapResult);  //[2,4,6,8,10,8,6,4,2],原先数组每一项乘以2后返回

最后一个方法是forEach(),它只对数组中的每一项运行给定函数,没有返回值,例如:

var arr = [1,2,3,4,5,4,3,2,1]; 
arr.forEach(function(item,index,array){ 
  //执行某些操作 
});

•数组的缩小方法

ES5还提供了两个缩小数组的方法:reduce()和reduceRight()。这两个方法都会迭代数组中的所有项,然后返回一个最终的值。reduce()从第一项开始逐渐遍历到最后一项,reduceRight()从最后一项开始遍历到第一项结束。这两个函数都接收四个参数:前一个值、当前值、项的索引和数组对象。这个函数返回的任何值都会作为第一个参数自动传递给下一项。例如,使用reduce()方法求数组所有项的和:

var arr = [1,2,3,4,5]; 
var sum = arr.reduce(function(pre,cur,index,array){ 
  return pre+cur; 
}); 
console.log(sum);  //15

第一次执行回调函数,pre是1,cur是2。第二次,pre是3(1+2),cur是3。这个过程会把数组的每一项都访问一遍,最后返回结果。reduceRight()方法与reduce()类似,只不过方向相反而已。

这篇笔记主要是根据JavaScript高级程序设计和网上资源总结出来的,如果有不完善的地方还请指出。

以上这篇基于JavaScript Array数组方法(新手必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript代码混淆综合解决方案-Javascript在线混淆器
Dec 18 Javascript
DIY jquery plugin - tabs标签切换实现代码
Dec 11 Javascript
Jquery绑定事件(bind和live的区别介绍)
Aug 23 Javascript
jQuery封装的tab选项卡插件分享
Jun 16 Javascript
JavaScript表单验证开发
Nov 23 Javascript
浅谈Vue.js
Mar 02 Javascript
Bootstrap下拉菜单更改为悬停(hover)触发的方法
May 24 Javascript
使用Fullpage插件快速开发整屏翻页的页面
Sep 13 Javascript
vue-cli初始化项目中使用less的方法
Aug 09 Javascript
vue swipe自定义组件实现轮播效果
Jul 03 Javascript
js图数据结构处理 迪杰斯特拉算法代码实例
Sep 11 Javascript
js实现全选和全不选功能
Jul 28 Javascript
老生常谈JavaScript 正则表达式语法
Aug 20 #Javascript
浅谈时钟的生成(js手写简洁代码)
Aug 20 #Javascript
js 基础篇必看(点击事件轮播图的简单实现)
Aug 20 #Javascript
再谈Javascript中的异步以及如何异步
Aug 19 #Javascript
用原生js统计文本行数的简单示例
Aug 19 #Javascript
jQuery购物网页经典制作案例
Aug 19 #Javascript
手机Web APP如何实现分享多平台功能
Aug 19 #Javascript
You might like
PHP 中的批处理的实现
2007/06/14 PHP
PHP简单系统数据添加以及数据删除模块源文件下载
2008/06/07 PHP
php json_encode奇怪问题说明
2011/09/27 PHP
php重定向的三种方法分享
2012/02/22 PHP
列举PHP的Yii 2框架的开发优势
2015/07/03 PHP
图像替换新技术 状态域方法
2010/01/28 Javascript
Extjs Ext.MessageBox.confirm 确认对话框详解
2010/04/02 Javascript
基于javascipt-dom编程 table对象的使用
2013/04/22 Javascript
关于jquery的多个选择器的使用示例
2013/10/18 Javascript
提取字符串中年月日的函数代码
2013/11/05 Javascript
js charAt的使用示例
2014/02/18 Javascript
javascript实现2048游戏示例
2014/05/04 Javascript
js创建一个input数组并绑定click事件的方法
2014/06/12 Javascript
jQuery ajaxSubmit 实现ajax提交表单局部刷新
2016/07/04 Javascript
jQuery插件ContextMenu自定义图标
2017/03/15 Javascript
详解用webpack2.0构建vue2.0超详细精简版
2017/04/05 Javascript
JavaScript中Object值合并方法详解
2017/12/22 Javascript
angularJS实现动态添加,删除div方法
2018/02/27 Javascript
AngularJS使用Filter自定义过滤器控制ng-repeat去除重复功能示例
2018/04/21 Javascript
微信小程序实现省市区三级地址选择
2020/06/21 Javascript
云服务器部署Node.js项目的方法步骤(小白系列)
2020/03/23 Javascript
JavaScript实现原型封装轮播图
2020/12/27 Javascript
Python实现定时执行任务的三种方式简单示例
2019/03/30 Python
pytorch实现MNIST手写体识别
2020/02/14 Python
HTML5画渐变背景图片并自动下载实现步骤
2013/11/18 HTML / CSS
AmazeUI 加载进度条的实现示例
2020/08/20 HTML / CSS
Clarria化妆品官方网站:购买天然和有机化妆品系列
2018/04/08 全球购物
英国伦敦的睡衣品牌:Asceno
2019/10/06 全球购物
护士实习自我鉴定
2013/10/22 职场文书
电气工程师岗位职责
2014/01/01 职场文书
学术会议欢迎词
2014/01/09 职场文书
四风问题自查自纠工作情况报告
2014/10/28 职场文书
新郎新娘致辞
2015/07/31 职场文书
中秋节感想
2015/08/10 职场文书
2019开业庆典剪彩仪式主持词!
2019/07/22 职场文书
windows11怎么查看wifi密码? win11查看wifi密码的技巧
2021/11/21 数码科技