Javascript数组Array方法解读


Posted in Javascript onMarch 13, 2016

接上一篇《Javascript数组Array基础介绍》,这一篇详细介绍Array的所有方法。

所有数组的方法都定义在Array.prototype上,而Array.prototype本身也是一个数组。

array.concat()

浅复制一份当前数组,并把接收到的参数附加到新数组的末尾。原数组不改变。

语法

array.concat(value1, value2, ..., valueN)
参数为需要合并的数组或非数组值

var arr1 = [1, 2, 3];
var obj = {animal : 'monkey'};
var arr2 = arr1.concat([4, 5, 6], obj, [7, 8, 9]);
// arr1 [1, 2, 3]
// arr2 [1, 2, 3, 4, 5, 6, {animal : 'monkey'}, 7, 8, 9]

obj.animal = 'tiger';
// [1, 2, 3, 4, 5, 6, {animal : 'tiger'}, 7, 8, 9]

可以合并数组或非数组值,但是要注意如果包含对象,对象还是引用原来的对象。

array.join()

返回一个将数组所有元素用分隔符拼接成的字符串,默认分隔符为逗号。

语法

array.join(seperator)
参数为分割符

var arr1 = [1, 2, 3];
var str = arr1.join(); // 1,2,3
str = arr1.join('#'); // 1#2#3

当将大量字符串片段组装时,join方法比+元素运算符要快。

利用new Array(3)将生成一个长度为三的空数组,同时结合join()方法,可以实现重复某段字符串。

var str = new Array(3).join('-+'); // -+-+

重复的次数就是数组长度减一,因为字符串是分隔符。

由于数组本身是对象,拥有toString()方法,利用它也能实现将数组拼接成一个字符串,只不过分隔符只能是逗号了。

var arr1 = [1, 2, 3];
arr1.toString(); // 1,2,3

实际上它会先调用每一个元素的toString()方法。

array.push()

把一个或多个参数附加在数组末尾,返回数组长度。改变数组自身。

语法

array.push(value1, value2, ..., valueN);
实例

var arr1 = [1, 2, 3];
var len = arr1.push(4, 5);

console.log(len); // 5
console.log(arr1); // [1, 2, 3, 4, 5]

另一种方法也可以实现在数组末尾插入值。

arr1[arr1.length] = 6; // [1, 2, 3, 4, 5, 6]  
array.pop()

将数组最后一项删除,并返回删除项。改变数组自身。

var arr1 = [1, 2, 3];
arr.pop(); // [1, 2] 返回 3

如果数组为空,返回undefined。

array.unshift()

把一个或多个参数插入到数组头部,返回数组长度。改变数组自身。

var arr1 = [1, 2, 3];
var len = arr1.unshift(4, 5);

console.log(len); // 5
console.log(arr1); // [4, 5, 1, 2, 3]

array.shift()

将数组的第一项删除,并返回删除项。改变数组自身。

var arr1 = [1, 2, 3];
arr.shift(); // [2, 3] 返回 1

如果数组为空,返回undefined。

array.sort()

这个方法按照每个元素的toString()方法返回的值进行排序,所以一般得不到期望的结果。

var arr1 = [1, 2, 3, 14, 24];
arr1.sort(); // [1, 14, 2, 24, 3]

但是sort()方法可以接收一个我们自定义的函数进行比较。比较函数接受两个参数,尤其sort()默认是升序,所以如果想让第一个参数位于第二个参数前面就要返回负数,相等返回0,位于后面返回正数。

var compare = function(a, b){
  return a - b;
}

var arr2 = [1, 12, 2, 23, 3 , 5, 4];
arr2.sort(compare); // [1, 2, 3, 4, 5, 12, 23]

比较字符串可以结合string.localeCompare()方法来用。

var arr3 = ['F', 'e', 'f', 'E'];
arr3.sort(function(a, b){
  return a.localeCompare(b);
});
// ['e', 'E', 'f', 'F']

array.reverse()

反转数组元素顺序,返回数组自身。

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

array.slice()

对数组浅复制其中的一段,不改变数组自身。

array.slice(start, end);
方法接受两个参数,最后一个可以省略,默认是数组自身长度。

var arr1 = [1, 2, 3, 4, 5, 6];

arr1.slice(4); // [5, 6]
arr1.slice(2, 4); // [3, 4]
arr1.slice(-3); // [4, 5, 6]

如果传入负数,那么会被自动加上数组的长度,试图变成非负数。
传入一个绝对值小于数组长度的值,就是从后向前取负数绝对值个数的元素。例如例子中取了后三个元素。

array.splice()

这是数组中最强大也最常用对的方法了,可以实现删除,插入,替换。

语法

array.slice(start, count, item);
该方法移除一个或多个元素,并用新的元素替代他们。start是开始的位置,count是删除的数量,item是新增加的元素(item不止一个,也可省略),以数组形式返回删除的元素。

var arr1 = [1, 2, 3, 4, 5];
//删除
arr1.splice(2, 1); // [1, 2, 4, 5] 返回 [3]
//插入
arr1.splice(3, 0, 6, 7); // [1, 2, 4, 6, 7, 5]
//替换
arr1.splice(1, 2, 8, 9); // [1, 8, 9, 6, 7, 5] 返回[2, 4]

下面介绍一些ECMAScript5新增的方法,主要是ie8不支持。

indexOf() 与 lastIndexOf()

查找对应项在数组中的索引位置,第二个参数表示对应查找方向的起始位置,返回第一个匹配的位置,如果没有找到则返回-1;
indexOf()是从前往后查找,lastIndexOf()是从后往前查找。

var arr1 = [1, 2, 3, 4, 3, 2, 1];
arr1.indexOf(2); // 1
arr1.indexOf(2, 3); // 5

arr1.lastIndexOf(3); // 4
arr1.lastIndexOf(3, 4) // 2

迭代方法

以下方法接受两个参数,第一个是每一项运行的函数,第二个函数运行的作用域。
运行函数有三个参数,分别是当前项,位置,数组本身。

array.every()

运行给定函数,如果迭代每一项都返回true,则最终返回true。

var arr1 = [1, 2, 3, 4, 5];
arr1.every(function(item, index, array){
  return item > 3;
});
// false

array.some()

运行给定函数,如果迭代中有一项返回true,则最终返回true。

arr1.some(function(item, index, array){
  return item > 3;
});
// true

array.map()

运行给定函数,将迭代中返回的值组成数组,返回该数组。

arr1.map(function(item, index, array){
  return item * 2;
});
// [2, 4, 6, 8, 10]

array.filter()

运行给定函数,将迭代中返回true的元素以数组形式返回

arr1.filter(function(item, index, array){
  return item > 3;
});
// [4, 5]

array.forEach()

运行给定函数,不返回任何值。类似于普通的for循环的功能。

归并方法

函数接受两个参数,第一个参数是每一个运行的自定义函数,第二项是作为归并基础的初始值。
自定义函数接受四个参数,分别是前一项,当前项,位置,数组。

array.reduce() 与 array.reduceRight()
var splitstr = function(prev, item, index, array){
  return prev + '#' + item;
}

var arr1 = [1, 2, 3, 4, 5];
arr1.reduce(splitstr, 8); // 8#1#2#3#4#5
arr1.reduceRight(splitstr, 8); // 8#5#4#3#2#1

小结

这一篇介绍了数组方法的种种细节和注意问题,下一篇将会介绍数组更高级的用法。本篇后续会添加ECMAScript6 新增加的数组方法的介绍。

Javascript 相关文章推荐
javascript call和apply方法
Nov 24 Javascript
JavaScript 继承详解(四)
Jul 13 Javascript
在chrome中window.onload事件的一些问题
Mar 01 Javascript
jQuery 借助插件Lavalamp实现导航条动态美化效果
Sep 27 Javascript
jquery实现效果比较好的table选中行颜色
Mar 25 Javascript
kindeditor编辑器点中图片滚动条往上顶的bug
Jul 05 Javascript
功能强大的jquery.validate表单验证插件
Nov 07 Javascript
浅析前端路由简介以及vue-router实现原理
Jun 01 Javascript
vue 监听键盘回车事件详解 @keyup.enter || @keyup.enter.native
Aug 25 Javascript
在vue中把含有html标签转为html渲染页面的实例
Oct 28 Javascript
微信小程序登录时如何获取input框中的内容
Dec 04 Javascript
vue-cli —— 如何局部修改Element样式
Oct 22 Javascript
GitHub上一些实用的JavaScript的文件压缩解压缩库推荐
Mar 13 #Javascript
Javascript数组Array基础介绍
Mar 13 #Javascript
深入探究JavaScript中for循环的效率问题及相关优化
Mar 13 #Javascript
简单谈谈json跨域
Mar 13 #Javascript
详解JavaScript中数组和字符串的lastIndexOf()方法使用
Mar 13 #Javascript
Node.js编写爬虫的基本思路及抓取百度图片的实例分享
Mar 12 #Javascript
JavaScript中循环遍历Array与Map的方法小结
Mar 12 #Javascript
You might like
php 表单数据的获取代码
2009/03/10 PHP
深入php socket的讲解与实例分析
2013/06/13 PHP
php开发工具有哪五款
2015/11/09 PHP
PHP后台微信支付和支付宝支付开发
2017/04/28 PHP
PHP 中魔术常量的实例详解
2017/10/26 PHP
网页前台通过js非法字符过滤代码(骂人的话等等)
2010/05/26 Javascript
用jquery实现等比例缩放图片效果插件
2010/07/24 Javascript
javascript权威指南 学习笔记之javascript数据类型
2011/09/24 Javascript
编程语言JavaScript简介
2014/10/16 Javascript
jquery+php实现搜索框自动提示
2014/11/28 Javascript
javascript实现3D变换的立体圆圈实例
2015/08/06 Javascript
jquery特效 点击展示与隐藏全文
2015/12/09 Javascript
详解AngularJS中自定义过滤器
2015/12/28 Javascript
Ionic如何实现下拉刷新与上拉加载功能
2016/06/03 Javascript
基于JS实现导航条flash导航条
2016/06/17 Javascript
vuex实现简易计数器
2016/10/27 Javascript
Angularjs修改密码的实例代码
2017/05/26 Javascript
在vue组件中使用axios的方法
2018/03/16 Javascript
Vue.js下拉菜单组件使用方法详解
2019/10/19 Javascript
jQuery操作选中select下拉框的值代码实例
2020/02/07 jQuery
jQuery 实现DOM元素拖拽交换位置的实例代码
2020/07/14 jQuery
使用IPython下的Net-SNMP来管理类UNIX系统的教程
2015/04/15 Python
Python OS模块常用函数说明
2015/05/23 Python
Python使用gensim计算文档相似性
2016/04/10 Python
Python利用IPython提高开发效率
2016/08/10 Python
Python实现的旋转数组功能算法示例
2019/02/23 Python
Python Selenium 设置元素等待的三种方式
2020/03/18 Python
HTML5在手机端实现视频全屏展示方法
2020/11/23 HTML / CSS
Ellesse英国官网:意大利高级运动品牌
2019/07/23 全球购物
检察官就职演讲稿
2014/01/13 职场文书
优秀公益广告词大全
2014/03/19 职场文书
政府门卫岗位职责
2014/04/29 职场文书
2015年试用期工作总结
2014/12/12 职场文书
MySQL InnoDB ReplicaSet(副本集)简单介绍
2021/04/24 MySQL
Python Flask请求扩展与中间件相关知识总结
2021/06/11 Python
Python scrapy爬取起点中文网小说榜单
2021/06/13 Python