Skip to content
Go back

数组方法

检测数组

// 当一个网页有多个框架时,每个框架里的数组的构造函数是不同的,这种检查方法就会失效
var arr = [];
arr instanceof Array; // true
// ES5新增方法
var arr = [];
Array.isArray(arr); // true
Object.prototype.toString.call([]); // [object Array]

转换方法

toString valueOf toLocaleString

join

把数组转换成字符串,并用指定的字符分割开来 如果数组里的某项是null undefined,那么该值转化成字符串时是空字符串

var arr = ['red', 'green'];
arr.join('|'); // red|green

字符串的split()与它相反

var str = 'red,green';
str.split(','); // ['red', 'green']

栈方法

push

push()方法可以接收任意数量的参数,并把它们逐个添加到末尾 最后返回数组的长度

var arr = [];
arr.push('red'); // 返回1

pop

pop()方法移除数组的最后一项,并且把最后一项返回回来

var arr = ['red'];
arr.pop(); // 返回'red'

队列方法

shift

shift()把数组的第一项移除并且返回回来

var arr = ['red', 'green'];
arr.shift(); // 返回'red'

unshift

unshift()可以接收任意数量的参数,并把它们添加到数组前端 最后返回数组的长度

var arr = [];
arr.unshift('red'); // 返回1

重排序方法

reverse

把数组颠倒顺序

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

sort

默认情况下升序排序 把每个元素先toString(),然后再比较大小,所以不适用于数字比较

// 不是想要的排序
var arr = [10, 5, 1];
arr.sort(); // [1, 10, 5]

使用比较函数排序

// 正确的排序
var arr = [10, 5, 1];
arr.sort(function(a, b) {return a - b}); //  [1, 5, 10]

操作方法

concat

基于当前数组创建一个新的数组 原来的数组不会改变

var arr = ['red'];
var arr2 = arr.concat('green', ['black', 'yellow']);
arr2; // ['red', 'green', 'black', 'yellow']
arr1; // ['red']

slice

基于当前数组中的一项或多项创建一个新的数组 原来的数组不会改变

var arr = ['red', 'green', 'yellow'];
arr.slice(); // 复制一个新的数组
arr.slice(1); // 从第1项开始复制,返回新的数组 ['green', 'yellow']
arr.slice(1, 3); // 从第1项开始复制, 复制到第3项为止(但是不包括第3项),返回新的数组 ['green', 'yellow']

如果参数有负数,则负数用数组的长度加上该负数来确定 如果结束位置小于开始位置,则返回空数组

splice

splice会破坏原来的数组

删除

两个参数 splice(从第几项开始删除, 删除几个)

var arr = ['red', 'green', 'yellow'];
arr.splice(1, 2); // 从第1项开始,删除2个元素
arr; ['red']

插入和替换

三个参数以上 splice(从第几项开始删除, 要删除的项数, 要插入的项)

var arr = ['red', 'green', 'yellow'];
arr.splice(1, 2, 'black', 'purple');  // 从第1项开始,删除2个元素,然后从第1项开始添加
arr; ['red', 'black', 'purple']

位置方法

indexOf lastIndexOf

返回指定元素在数组中的位置,如果没有,则返回-1

var arr = ['red', 'green'];
arr.indexOf('green'); // 1
// 可选的第二个参数表示从哪个位置开始找,默认为0
var arr = ['red', 'green'];
arr.indexOf('green', 1); // 1

迭代方法

每个方法都接收两个参数

  1. 第一个参数是在每一项运行的函数,该函数又接受三个参数,分别是数组项的值,该项在数组中的位置,数组本身

  2. 第二个参数是运行函数时的this指向(默认是window)

every

如果函数对每一项都返回true,则返回true 如果有一项返回false,则直接返回false,并且不会再对后面的项运行函数

some

如果函数对某一项返回true,则返回true 如果有一项返回true,则直接返回true,并且不会再对后面的项运行函数

var arr = [1, 2, 3, 4, 5];

arr.every(function(item, index, arr) {
	return item > 2;
}); // false

arr.some(function(item, index, arr) {
	return item > 2;
}); // true

filter

返回该函数会返回true的项组成的数组

// 返回大于2的项

var arr = [1, 2, 3, 4, 5];

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

map

返回每次函数调用结果组成的数组

// 每项的两倍

var arr = [1, 2, 3, 4, 5];

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

forEach

对数组的每一项运行给定函数,没有返回结果 就是for循环的代替而已

var arr = [1, 2, 3, 4, 5];

arr.forEach(function(item, index, arr) {
	// 执行某些操作
});

归并方法

reduce

从第一项开始,逐个遍历到最后

接受两个参数

  1. 第一个参数是每一项上调用的函数 该函数又接受4个参数,分别是:前一个值, 当前值, 当前项的索引, 数组对象 这个函数的返回值会作为第一个参数自动传给下一项 第一次迭代发生在数组的第二项,因此第一个参数是数组的第一项,第二个参数是数组的第二项

  2. 第二个参数是作为归并基础的初始值

// 计算数组每项之和

// 第一次迭代,prev是1, cur是2,  返回3
// 第二次迭代, prev是3,cur是3, 返回6
var arr = [1, 2, 3];

arr.reduce(function(prev, cur, index, arr) {
	return prev + cur;
}); // 6

reduceRight

类似,只是从最后开始遍历。


Share this post on:

Previous Post
星期一的欧派
Next Post
CSS规范