创建数组 使用数组字面量方法 1 2 3 var arr1 = []; var arr2 = [20 ]; var arr3 = ['lily' ,'lucy' ,'Tom' ];
使用Array构造函数 1 2 3 var arr1 = new Array (); var arr2 = new Array (10 ); var arr3 = new Array ('lily' ,'lucy' ,'Tom' );
Array.of方法创建数组(es6新增) Array.of()方法会创建一个包含所有传入参数的数组,而不管参数的数量与类型
1 2 let arr1 = Array .of (1 ,2 ); let arr2 = Array .of (3 );
Array.from方法创建数组(es6新增) 在js中将非数组对象转换为真正的数组是非常麻烦的。在es6中,将可迭代对象或者类数组对象作为第一个参数传入,Array.from()就能返回一个数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Array .from ('foo' ); const set = new Set (['foo' , 'bar' , 'baz' , 'foo' ]);Array .from (set); const map = new Map ([[1 , 2 ], [2 , 4 ], [4 , 8 ]]);Array .from (map); const mapper = new Map ([['1' , 'a' ], ['2' , 'b' ]]);Array .from (mapper.values ()); Array .from (mapper.keys ()); function f ( ) { return Array .from (arguments ); } f (1 , 2 , 3 );
在Array.from
中还可以使用箭头函数
1 2 Array .from ([1 , 2 , 3 ], x => x + x); Array .from ({length : 5 }, (v, i ) => i);
利用这一原理,可以设计如下序列生成器:
1 2 3 4 5 6 7 8 9 10 11 const range = (start, stop, step ) => Array .from ({ length : (stop - start) / step + 1 }, (_, i ) => start + (i * step));range (0 , 4 , 1 ); range (1 , 10 , 2 ); range ('A' .charCodeAt (0 ), 'Z' .charCodeAt (0 ), 1 ).map (x => String .fromCharCode (x));
数组方法 数组原型方法主要有以下这些:join()
:用指定的分隔符将数组每一项拼接为字符串push()
:向数组的末尾添加新元素pop()
:删除数组的最后一项unshift()
:向数组首位添加新元素shift()
:删除数组的第一项slice()
:按照条件查找出其中的部分元素splice()
:对数组进行增删改filter()
:过滤功能concat()
:用于连接两个或多个数组indexOf()
:检测当前值在数组中第一次出现的位置索引lastIndexOf()
:检测当前值在数组中最后一次出现的位置索引every()
:判断数组中每一项都是否满足条件some()
:判断数组中是否存在满足条件的项includes()
:判断一个数组是否包含一个指定的值sort()
:对数组的元素进行排序reverse()
:对数组进行倒序forEach()
:es5及以下循环遍历数组每一项map()
:es6循环遍历数组每一项find()
:返回匹配的项findIndex()
:返回匹配位置的索引reduce()
:从数组的第一项开始遍历到最后一项,返回一个最终的值reduceRight()
:从数组的最后一项开始遍历到第一项,返回一个最终的值toLocaleString()
、toString()
:将数组转换为字符串entries()
、keys()
、values()
:遍历数组 欢迎补充… 各个方法功能详解
join() join()方法用于把数组中的所有元素转换一个字符串,默认使用逗号作为分隔符
1 2 3 4 var arr1 = [1 ,2 ,3 ];console .log (arr1.join ()); console .log (arr.join ('-' )); console .log (arr);
push()和pop() push()方法从数组末尾向数组添加元素,可以添加一个或多个元素,并返回新的长度 pop()方法用于删除数组的最后一个元素并返回删除的元素
1 2 3 4 5 6 7 8 var arr1 = ['lily' ,'lucy' ,'Tom' ];var count = arr1.push ('Jack' ,'Sean' );console .log (count); console .log (arr1); var item = arr1.pop ();console .log (item); console .log (arr1);
unshift()和shift() unshift()方法可向数组的开头添加一个或更多元素,并返回新的长度 shift()方法用于把数组的第一个元素从其中删除,并返回第一个元素的值
1 2 3 4 5 6 7 8 var arr1 = ['lily' ,'lucy' ,'Tom' ];var count = arr1.unshift ('Jack' ,'Sean' );console .log (count); console .log (arr1); var item = arr1.shift ();console .log (item); console .log (arr1);
sort() 用于对数组的元素进行排序。排序顺序可以是字母或数字,并按升序或降序,默认排序顺序为按字母升序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 var arr1 = ['a' ,'d' ,'c' ,'b' ];console .log (arr1.sort ()); function compare (value1,value2 ){ if (value1 < value2){ return -1 ; }else if (value1 > value2){ return 1 ; }else { return 0 ; } } var arr2 = [13 ,24 ,51 ,3 ];console .log (arr2.sort (compare));
reverse() 用于颠倒数组中元素的顺序,原数组改变
1 2 3 var arr1 = [13 ,24 ,51 ,3 ];console .log (arr1.reverse ()); console .log (arr1);
concat() 用于连接两个或多个数组,该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本
1 2 3 4 var arr1 = [1 ,3 ,5 ,7 ];var arrCopy = arr1.concat (9 ,[11 ,13 ]);console .log (arrCopy); console .log (arr1);
slice() 返回从原数组中指定开始下标到结束下标之间的项组成的新数组,可以接受一或两个参数,即要返回项的起始和结束位置(不包括结束位置的项)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 var arr1 = [1 ,3 ,5 ,7 ,9 ,11 ];var arrCopy = arr1.slice (1 );var arrCopy2 = arr1.slice (1 ,4 );var arrCopy3 = arr1.slice (1 ,-2 ); var arrCopy4 = arr1.slice (-4 ,-1 ); console .log (arr1); console .log (arrCopy); console .log (arrCopy2); console .log (arrCopy3); console .log (arrCopy4); var a=[1 ,2 ,3 ,4 ,5 ,6 ];var b=a.slice (0 ,3 ); var c=a.slice (3 ); var a=[1 ,2 ,3 ,4 ,5 ,6 ];var b=a.slice (-1 ); var a=[1 ,2 ,3 ,4 ,5 ,6 ];var b=a.slice (-6 ); var c=a.slice (-8 ); var a=[1 ,2 ,3 ,4 ,5 ,6 ];var b=a.slice (2 ,-3 ); var a=[1 ,2 ,3 ,4 ,5 ,6 ];var b=a.slice (6 );
splice() 可以实现删除、插入和替换 包含三个及以上参数:开始位置、删除数量、插入元素(插入到开始位置前)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 var a=['a' ,'b' ,'c' ];var b=a.splice (1 ,1 ,'e' ,'f' ); var arr1 = [1 ,3 ,5 ,7 ,9 ,11 ];var arrRemoved = arr1.splice (0 ,2 );console .log (arr1); console .log (arrRemoved); var arr1 = [22 ,3 ,31 ,12 ];arr1.splice (1 ,0 ,12 ,35 ); console .log (arr1);
forEach() 遍历数组。需要一个函数作为参数。数组中有几个参数,函数就执行几次,每次执行,浏览器就会把遍历到的元素作为实参传回,我们可以定义形参接受实参。浏览器会传递三个参数:正在遍历的元素、index(可省略)和正在遍历的数组(可省略)。
1 2 3 4 5 6 7 8 9 10 11 var arr = [1 ,2 ,3 ,4 ];var sum =0 ;arr.forEach (function (value,index,array ){ array[index] == value; sum+=value; }); console .log (sum);
map() 返回一个新数组,会按照原始数组元素顺序依次处理元素
1 2 3 4 5 6 7 let array = [1 , 2 , 3 , 4 , 5 ];let newArray = array.map ((item ) => { return item * item; }) console .log (newArray)
every() 判断数组中每一项都是否满足条件,只有所有项都满足条件,才会返回true
1 2 3 4 5 6 7 8 9 10 var arr1 = [1 ,2 ,3 ,4 ,5 ];var arr2 = arr1.every .every (x => { return x < 10 ; }); console .log (arr2); var arr3 = arr1.every (x => { return x < 3 ; }); console .log (arr3);
some() 判断数组中是否存在满足条件的项,只要有一项满足条件,就会返回true
1 2 3 4 5 6 7 8 9 10 var arr1 = [1 ,2 ,3 ,4 ,5 ];var arr2 = arr1.some (x => { return x < 3 ; }); console .log (arr2); var arr3 = arr1.some (x => { return x < 1 ; }); console .log (arr3);
includes() es6新增,用来判断一个数组、字符串是否包含一个指定的值,使用===运算符来进行值比较,如果是返回true,否则false,参数有两个,第一个是(必填)需要查找的元素值,第二个是(可选)开始查找元素的位置
1 2 3 4 5 6 var arr1 = [22 ,3 ,31 ,12 ,58 ];var includes = arr1.includes (31 );console .log (includes); var includes2 = arr1.includes (31 ,3 ); console .log (includes2);
reduce()和reduceRight() 都会实现迭代数组的所有项(即累加器),然后构建一个最终返回的值 reduce()方法从数组的第一项开始,逐个遍历到最后 reduceRight()方法从数组的最后一项开始。向前遍历到第一项 4个参数:前一个值、当前值、项的索引和数组对象
1 2 3 4 5 var arr1 = [1 ,2 ,3 ,4 ,5 ];var sum = arr1.reduce ((prev,cur,index,array ) => { return prev + cur; },10 ); console .log (sum);
toLocaleString()和toString() 都是将数组转换为字符串
1 2 3 4 5 6 var arr1 = [22 ,3 ,31 ,12 ];let str = arr1.toLocaleString ();var str2 = arr1.toString ();console .log (str); console .log (str2);
find()和findIndex() 都接受两个参数:一个回调函数,一个可选值用于指定回调函数内部的this 该回调函数可接受3个参数:数组的某个元素、该元素对应的索引位置、数组本身,在回调函数第一次返回true时停止查找。 二者的区别是:find()方法返回匹配的值,而findIndex()方法返回匹配位置的索引
1 2 3 4 5 6 7 let arr = [1 ,2 ,3 ,4 ,5 ];let num = arr.find (item => item > 1 );console .log (num) let arr = [1 ,2 ,3 ,4 ,5 ];let num = arr.findIndex (item => item > 1 );console .log (num)
entries()、keys()和values() es6新增。entries()、keys()和values()–用于遍历数组。它们都返回一个遍历器对象,可以用for…of循环进行遍历 区别是keys()是对键名的遍历、values()是对键值的遍历、entries()是对键值对的遍历
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 for (let index of [a,b].keys ()){ console .log (index); } for (let elem of [a,b].values ()){ console .log (elem); } for (let [index,elem] of [a,b].entries ()){ console .log (index,elem); }
如果不使用for…of循环,可以手动调用遍历器对象的next方法,进行遍历
1 2 3 4 5 let arr1 = [a,b,c];let entries = arrr1.entries ();console .log (entries.next ().value ); console .log (entries.next ().value ); console .log (entries.next ().value );
indexOf() indexof方法可以在字符串和数组上使用 indexOf() 方法可返回某个指定的字符串值在字符串、数组中首次出现的位置
1 2 3 4 5 6 let arr = ['mfg' , '2017' , '2016' ];console .log (arr.indexOf ('mfg' )); console .log (arr.indexOf ('m' )); console .log (arr.indexOf ('2017' ));console .log (arr.indexOf (2017 ));