数组

数组是一种类列表对象,它的原型中提供了遍历和修改元素的相关操作。JavaScript 数组的长度和元素类型都是非固定的。因为数组的长度可随时改变,并且其数据在内存中也可以不连续,所以 JavaScript 数组不一定是密集型的,这取决于它的使用方式。一般来说,数组的这些特性会给使用带来方便,但如果这些特性不适用于你的特定使用场景的话,可以考虑使用类型数组 TypedArray。

只能用整数作为数组元素的索引,而不能用字符串。后者称为关联数组。使用非整数并通过方括号或点号来访问或设置数组元素时,所操作的并不是数组列表中的元素,而是数组对象的属性集合上的变量。数组对象的属性和数组元素列表是分开存储的,并且数组的遍历和修改操作也不能作用于这些命名属性。

创建

var arr = [1, 2, 3, 4];
var arr_2 = Array(1, 2, 3, 4);

长度

var arr = [1, 2, 3, 4];
arr.length; //4

读取

var arr = [1, 2, 3, 4];
arr[0]; // 1
arr[3]; // 4
arr[4]; // undefined

赋值

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

操作

push

push() 方法接受的参数把它添加到数组末尾,返回修改后的数组长度。

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

pop

pop() 方法从数组末尾移除最后一项,减少数组的length,返回删除项目。

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

shift

shift() 方法从数组中的第一项移除,减少数组的length,返回删除项目。

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

unshift

unshift() 方法接受的参数把它添加到数组第一项,返回修改后的数组长度。

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

concat

concat() 方法可以基于当前数组所有项创建一个新数组。如果传递给方法的参数是数组,将会把参数中数组的每一项逐个添加到新数组中,如果参数不是数组,则简单的添加到数组末尾。

var Arr = [1,2,3];
var Arr2 = Arr.concat(4,[5,6],7); // [1, 2, 3, 4, 5, 6, 7]

slice

slice() 方法可以基于当前数组所有项创建一个新数组。在只有一个参数的情况下,返回该参数指定位置开始到当前数组最后一项。如果2个参数,返回开始和结束位置之间的项(不包含结束位置项)

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

splice

splice(m,n,s) 方法接收3个参数。在只有一个参数的情况下,删除并返回该参数指定位置开始到当前数组最后一项的数组。如果有2个参数,删除并返回开始和结束位置之间的项的数组(不包含结束位置项)。如果有三个参数,删除并返回开始和结束位置之间的项的数组(不包含结束位置项),再往数组删除的位置项插入第三个参数。

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

join

数组转字符串

var arr =  ['1','2','3'];
var str = arr.join('|'); // "1|2|3"

every

every() 对数组中每一项运行指定的函数,如果该函数对每一项都返回true,则返回true,否则为false。

var tmp = [1,2,3,4].every((item,index,arr) => item > 2 ); //false

some

some() 对数组中每一项运行指定的函数,如果该函数对任意一项有返回true,则返回true,否则为false。

var tmp = [1,2,3,4].some((item,index,arr) => item > 2 ); // true

filter

filter() 对数组中每一项进行运行指定函数,返回该函数会返回true的项组成的数组。

var tmp = [1,2,3,4].filter((item,index,arr) => item > 2 ); // [3,4]

forEach

forEach() 对数组中每一项进行运行指定函数,没有返回值。

var tmp = [1,2,3,4].forEach((item,index,arr) => item > 2 ); // undefined

map

map() 对数组中的每一项进行运行指定的函数,返回每一项结果返回的数组。

var tmp = [1,2,3,4].map((item,index,arr) => item + 1 ); // [2,3,4,5]

reduce

reduce() 方法会迭代数组的所有项,然后构建一个最终的返回值。方法接受两个参数,一个在每一项调用的函数和作为归并基础的初始值。其中函数接受4个参数(前一个值、当前值、索引、数组对象本身)。函数返回的任何值都会作为第一个参数传递给下一项。第一次迭代发生数组的第二项上。

var tmp = [1,2,3,4].reduce((prev, cur, index, array) => prev + cur ); // 10

参考