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编程开发中的五个实用小技巧
Jul 22 Javascript
JavaScript高级程序设计 读书笔记之九 本地对象Array
Feb 27 Javascript
jQuery插件kinMaxShow扩展效果用法实例
May 04 Javascript
实例讲解jQuery EasyUI tree中state属性慎用
Apr 01 Javascript
JavaScript中点击事件的写法
Jun 28 Javascript
jQuery Validate设置onkeyup验证的实例代码
Dec 09 Javascript
常用的javascript设计模式
Jan 11 Javascript
解决使用vue.js路由后失效的问题
Mar 17 Javascript
JavaScript实现京东购物放大镜和选项卡效果的方法分析
Jul 05 Javascript
JavaScript中join()、splice()、slice()和split()函数用法示例
Aug 24 Javascript
VUE搭建手机商城心得和遇到的坑
Feb 21 Javascript
Vue组件模板的几种书写形式(3种)
Feb 19 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函数
2006/12/06 PHP
限制ckeditor上传图片文件大小的方法
2013/11/15 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
bindParam和bindValue的区别以及在Yii2中的使用详解
2018/03/12 PHP
原生javascript实现图片滚动、延时加载功能
2015/01/12 Javascript
js中substring和substr两者区别和使用方法
2015/11/09 Javascript
jQuery Validation PlugIn的使用方法详解
2015/12/18 Javascript
jquery easyUI中ajax异步校验用户名
2016/08/19 Javascript
原生JS实现圆环拖拽效果
2017/04/07 Javascript
基于canvas粒子系统的构建详解
2017/08/31 Javascript
jQuery实现的响应鼠标移动方向插件用法示例【附源码下载】
2018/08/28 jQuery
vue使用localStorage保存登录信息 适用于移动端、PC端
2019/05/27 Javascript
Vue Render函数创建DOM节点代码实例
2020/07/08 Javascript
[00:09]DOTA2全国高校联赛 精彩活动引爆全场
2018/05/30 DOTA
Python3中多线程编程的队列运作示例
2015/04/16 Python
Python中线程编程之threading模块的使用详解
2015/06/23 Python
Python元组操作实例分析【创建、赋值、更新、删除等】
2017/07/24 Python
python之消除前缀重命名的方法
2018/10/21 Python
Python字符串逆序的实现方法【一题多解】
2019/02/18 Python
基于python实现可视化生成二维码工具
2020/07/08 Python
瑞典的玛丽小姐:Miss Mary of Sweden
2019/02/13 全球购物
同步和异步有何异同,在什么情况下分别使用他们?
2012/12/28 面试题
室内设计实习自我鉴定
2013/09/25 职场文书
迟到检讨书5000字
2014/01/31 职场文书
环境监测与治理技术专业求职信
2014/07/06 职场文书
行政专员岗位职责说明书
2014/07/30 职场文书
教师职业道德事迹材料
2014/08/18 职场文书
股东授权委托书范本
2014/09/13 职场文书
党员民主生活会个人整改措施材料
2014/09/16 职场文书
代领学位证书毕业证书委托书
2014/09/30 职场文书
寝室长工作失责检讨书
2014/10/06 职场文书
欢迎家长标语
2014/10/08 职场文书
2014年骨干教师工作总结
2014/12/19 职场文书
百日宴上的祝酒词
2015/08/10 职场文书
利用Python网络爬虫爬取各大音乐评论的代码
2021/04/13 Python
CSS布局之浮动(float)和定位(position)属性的区别
2021/09/25 HTML / CSS