数组
1.数组的常见方法:
(1) join():省略分隔符参数的话则用默认用逗号为分隔符,不改变原数组,通过join方法可以实现重复字符串
function repeatString(str,n){ return new Array(n+1).join(str); } console.log(repeatString("abc",3));//abcabcabc
(2) push():可以接收任意数量的参数并添加到数组末尾,返回修改后的数组的长度,同理unsift()
pop()移除数组末尾最后一项,返回移除的项,数组为空则返回undefined,同理shift()
var arr=['q','w','e'] var count=arr.push('k','n'); console.log(count); var item=arr.pop(); console.log(item);//n console.log(arr);//['q','w','e','k'];(3) reverse()反转数组项的顺序
(4)sort()按升序排列数组项,在排序时会调用数组项的toString()转型法来进行排序,哪怕数组项中的每一项都是数值,sort()可以指定一个比较函数(接收两个参数)作为参数来实现数值升序降序。
function compare(value1,value2){ if(value1<value2){//value1>value2即实现降序 return -1; }else if(value1>value2){//value1>value2即实现降序 return 1; }else{ return 0; } } arr=[12,34,23,1]; console.log(arr.sort(compare));//[1,12,23,34];(5)concat()方法,复制当前数组并添加接收到的参数,最后返回新构建的数组且并不会改变原数组。
var arr=[1,3,5,7]; var arrCopy=arr.concat(9,[11,13]); console.log(arrCopy);[1,3,5,7,9,11,13];//接收一维数组为参数 var arrCopy2=arr.concat([9,[11,13]]); console.log(arrCopy2);[1,3,5,7,9,[11,13]];//接收二维数组为参数(6)slice()方法:返回从原数组指定开始下标到结束下标之间的项组成的新数组,原数组不变,一个参数指定位置到数组末尾,两个参数返回起始和结束的项。
(7)splice()方法:实现删除、插入、替换,(起始位置,指定数量,替换元素),这个会改变原数组,原数组被替换、删除的值会被返回。
var arr = [1,3,5,7,9,11]; var arrRemoved = arr.splice(0,2); console.log(arr); //[5, 7, 9, 11] console.log(arrRemoved); //[1, 3] var arrRemoved2 = arr.splice(2,0,4,6); console.log(arr); // [5, 7, 4, 6, 9, 11] console.log(arrRemoved2); // [] var arrRemoved3 = arr.splice(1,1,2,4); console.log(arr); // [5, 2, 4, 4, 6, 9, 11] console.log(arrRemoved3); //[7](8)indexOf()和lastIndexof(),接收两个参数,要查找的项和表示起点位置的索引,没找到就返回 -1;
(9)forEach()方法:对数组进行遍历循环,对数组中的每一项运行给定函数,传参分别为数组内容,数组索引,数组本身
var arr = [1, 2, 3, 4, 5]; arr.forEach(function(x, index, a){ console.log(x + '|' + index + '|' + (a === arr)); }); // 输出为: // 1|0|true // 2|1|true // 3|2|true // 4|3|true // 5|4|true(10)map()指的是"映射",对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组
var arr = [1, 2, 3, 4, 5]; var arr2 = arr.map(function(item){ return item*item; }); console.log(arr2); //[1, 4, 9, 16, 25](11)filter()指的是过滤,数组中的每一项运行给定函数,返回满足过滤条件组成的数组
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; var arr2 = arr.filter(function(x, index) { return index % 3 === 0 || x >= 8; }); console.log(arr2); //[1, 4, 7, 8, 9, 10](12)every():判断数组中每一项都是否满足条件,只有所有项都满足条件,才会返回true。some():判断数组中是否存在满足条件的项,只要有一项满足条件,就会返回true
var arr = [1, 2, 3, 4, 5]; var arr2 = arr.every(function(x) { return x < 10; }); console.log(arr2); //true(13)reduce和reduceRight(),函数接收4个参数function(前一个值(数组第一项),当前值(数组第二项),索引,数组对象),外加(可选的)作为归并基础的初始值,第一次迭代就是数组第一项,第二项
var values = [1,2,3,4,5]; var sum = values.reduceRight(function(prev, cur, index, array){ return prev + cur; },10); console.log(sum); //25