JavaScript数组方法总结

分类总结Js数组常用的一些方法,从最常用的数组遍历开始。

一 数组遍历

1 Array.forEach()
为每个数组元素调用一个函数,没有返回值,这个要和map()区分开。

var arr = [1, 2, 3];
arr.forEach(function(x, i) { console.log(x); arr[i]++;});	
// 输出1 2 3
// 执行后arr为[2, 3, 4],注意这里同时使用了arr和它的索引。

2 Array.map()
与forEach()不同的是,map()会返回一个新数组,长度与array一样。执行机制是对数组的每个元素执行map()中的函数一次,并将此函数的返回值存储在新数组的对应序号处。举例:

var arr = [1, 2, 3];
var newArr = arr.map(function(x) { return x * x;});
// newArr为[1, 4, 9];

二 数组搜索

1 Array.indexOf()
指在arry中查找值,其中可以有第二个参数为开始查找的序号。如果没有查找到返回-1,找到则返回序号值。注意比较的时候使用的为全等===

var arr = [1, 6, 9];
arr.indexOf(1);		// 0
arr.indexOf(2);		// -1
arr.indexOf(6, 2);  // 从第2个元素开始找6,找不到即返回-1

2 Array.lastIndexOf()
与indexOf()同理,只不过查找的方向为反向。

三 数组操作

1 Array.push()
指在数组的尾部追加一个元素,返回值为追加后数组的长度

var arr = [1, 2, 3];
var len = arr.push(4);		// len为4

2 Array.pop()
指在数组尾部移除元素,并返回这个元素

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

3 Array.shift()
在数组头部移除一个元素,返回数组原来的第一个元素。

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

4 Array.unshift()
在数组头部加入一个元素,返回数组的新长度

var arr = [1, 2, 3];
var value = arr.unshift(0);		// arr = [0, 1, 2, 3] value = 4

5 Array.concat()
衔接数组,将参数衔接到原数组中,并且得到一个新数组返回,要注意如果一个参数为一个数组,那么会将数组中的元素衔接到原数组中,而不是数组本身。

var arr = [1, 2, 3];
a.concat(4, 5);		// 返回[1, 2, 3, 4, 5]
a.concat([4, 5]);	// 返回同上
a.concat([4, 5], [6, 7]);	// 返回[1, 2, 3, 4, 5, 6, 7]
a.concat(4, [5, [6, 7]]);		// 返回[1, 2, 3, 4, 5, [6, 7]]

6 Array.slice(start, end)
返回数组的一部分,返回值是一个新数组,不会修改原数组。start和end为序号,表示返回从start到end之前的所有元素。如果没有指定end则返回start到尾部所有元素。可使用负值,如-1代表倒数第一个元素,-2代表倒数第二个。

var arr = [1, 2, 3, 4];
arr.slice(0, 3);    // 返回[1, 2, 3]
arr.slice(1);		// 返回[2, 3, 4]
arr.slice(1, -1);   // 返回[2, 3]
arr.slice(-3, -2);  // 返回[2]

7 Array.splice(start, deleteCount, value, …)
插入删除或者替换数组元素,start为开始插入或删除处元素的序号,deleteCount为删除元素的个数,从start开始,包含start处的元素,指定为0则表示插入元素而不删除任何元素。value为插入的一个或多个值。
如果在数组中删除了元素则返回一个新数组,包含这些被删除的元素

var arr = [1, 2, 34];
// 从序号为1的位置删除两个元素,并返回这两个元素组成的数组,同时对原数组修改
// 执行后arr为[1,4],返回值为[2,3]
arr.splice(1, 2);		
// 再次删除一个元素,返回值为[4],a为[1]
arr.splice(1, 1);
// 从arr中删除0个元素,即不删除,同时加入2和3
// 此时不删除返回值即为[],arr执行后为[1, 2, 3]
arr.splice(1, 0, 2, 3);

8 Array.join(separator)
将数组衔接为字符串,其中可选参数separator为分隔每个元素的字符或字符串。返回值为一个生成的字符串,过程会将每个元素转化为字符串,然后用separator将字符串分隔开,作为最后返回的字符串。

var arr = [1, 2, 3];
var str = arr.join('+');		// 返回"1+2+3"
var str2 = arr.join('a');		// 返回"1a2a3"

四 数组判断(断言)

1 Array.every()
判断断言函数是否对每个元素为真,如果每个元素为真则返回ture,反之为false,类似于做与操作。

var arr = [1, 2, 3];
var result = arr.every(function(x){ return x < 4});	// true,都小于4
var result2 = arr.every(function(x){ return x > 2});	// false,1不大于2

2 Array.some()
判断数组中是否有元素满足断言函数,如果有一个为ture则为ture。

var arr = [1, 2, 3];
var result = arr.some(function(x){ return x < 2});	// true,1小于2
var result2 = arr.some(function(x){ return x > 4});	// false,都不大于4                                                                                   

3 Array.filter()
返回满足断言的数组元素,返回值为一个新数组

var arr = [1, 2, 3];
var result = arr.filter(function(x){ return x > 1;});	// 返回新数组[2, 3]                                                                                

五 数组排序

1 Array.sort(orderfunc)
对数组元素进行排序,直接在原数组上进行排序,不会新建数组。
如果执行时不带参数,则按字母顺序(准确来说是字符编码顺序)对数组元素进行排序,如果有必要的话会吧元素转为字符串以便于比较。
如果提供比较函数,按照其他规则来排序的话,函数必须接受参数ab,并返回一个数字表明相对顺序。

  • 如果返回值小于0,则说明a排序小于b,a应当排在b前面
  • 等于0则a和b相等,顺序不变
  • 大于0则表示a大于b,排在b后面
var arr = [2, 5, 3];
arr.sort();		// arr现在为[2, 3, 5]

var arr2 = [2, 5, 3];
// 反向排序,排序后arr2为[5, 3, 2]
// 举例,如a为5,b为2,则返回值为b-a即小于0,表示在排序中a顺序小于b,即a在b之前
arr2.sort(function(a, b){ return b - a;});                                              

2 Array.reverse()
将数组中的元素顺序颠倒,会在原数组中进行操作。

六 数组计算

1 Array.reduce(f, inital)
从数组元素中计算出一个值,需要给出一个计算函数,计算函数用来对两个值执行操作并返回结果。可选参数为inital,加入后效果和将参数插入数组头部一样。返回值为计算得到的值,举例来说,计算所有数组之和:

function add(a, b) { return a + b; }
var arr = [1, 2, 3];
var result = arr.reduce(add);		// 返回值为1+2+3即6
var result2 = arr.reduce(add, 4);	// 返回值为1+2+3+4即10

2 Array.reduceRight(f, inital)
同理,和reduce()效果一样,但执行顺序从右到左。

function divide(a, b) { return a / b; }
var arr = [1, 2, 4];
var result = arr.reduce(divide);		// 返回值为4/2/1即2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值