数组 基础
- var arr=[]; 传递一个参数的话,若是数值则是项数,其他类型则是一项的值;
- isArray()判断是否数组;
- 数组转字符串:
-
- 调用数组的toLocaleString(),toString(),valueOf()返回的是以逗号相隔的每一项的字符串形式,而join()则可以不用逗号分隔,join()接受的唯一一个参数就是分隔符;
- 添加或移除数组项:
-
- 动态地为数组末尾添加项数, color[color.length]=‘red';
- 数组栈方法(Last-In-First-Out)
-
- 栈的中项数的变化只发生在顶部,push()推入,pop()弹出,移除最后一项的同时返回最后一项;
- 队列方法
-
- push() , shift()移除并返回的是第一项第一项,unshift()是添加第一项;
- 重新排序方法:
-
- reverse()
-
- 简单粗暴,反转数组项顺序 [1,2,3].reverse() // [3,2,1]
- sort()
-
- default是升序排列数组,原理是调用数组项每一项的toString(),将数组项转换成字符串再比较它们。如: [0,1,5,10,15].sort() //[0,1,10,15,5]
- sort()函数接受一个比较函数作为参数,排序的时候根据比较函数返回的值进行排序。而比较函数呢,接受两个进行比较的数据,当比较函数返回负值时,则第一个参数排在第二个参数前面,不用换位置;当比较函数返回0是,两个参数相等;当比较函数返回正数时,第一个函数应排在第二个参数后面,换位置;如果想要降序排列,设置相反的返回值即可;
function compare(value1, value2){
if (value1< value2){
return - 1; // 升序,负值不用交换
} else if(value1> value2){
return 1;
}else {
return 0;
}
}
if (value1< value2){
return - 1; // 升序,负值不用交换
} else if(value1> value2){
return 1;
}else {
return 0;
}
}
-
-
- 当比较函数的两个参数是数值,或者是valueOf()返回数值的对象时,可以直接return value1-value2,这样就直接根据value1-value2的结果决定要不要交换顺序;降序则用value2-value1
-
- 操作方法
-
- concat() ,copy一份数组副本同时为该 新的数组 添加项;就不像栈方法、队列方法是在原数组上操作;
- slice(),返回子数组;slice(2,5)返回数组index为2-4的子数组;slice(3)返回从index为3到结束的子数组;
- splice() 强大的方法,用于处理数组中部的项
-
- 删除
-
- splice(2,3); 从index为2处开始删除,共删除三项;返回被删除的子数组[index2,index3,index4],原数组改变;
- 插入/替换
-
- splice(2, 0, 'red', 'green'); 在index为2处,不删除任何项,插入'red','green ; 相当于让index2=' red ' ; index3=' green ' ;
- splice(2, 3, 'red', 'green'); 从index为2处开始,删除原来的3项并替换为'red','green;相当于index2='red' ; index3='green' ;并且数组length减少了1(替换项比删除项少了一项)
- 位置方法
-
- indexOf();顺序查找,返回位置。无结果返回-1,采用全等判断是否相等
- lastIndexOf() 逆序 查找,返回位置。无结果返回-1,采用全等判断是否相等
- 迭代方法
-
- forEach() 没有返回值,只是让数组每一项都执行某个函数;forEach(function(){…………});
- some() 数组每一项都执行某个函数,如果该函数对任一项返回的是true,则该方法返回true;用于检测是否含有符合条件的数组项;
- every()数组每一项都执行某个函数,如果该函数对每一项返回的是true,则该方法返回true;用于检测是否数组项是否全部符合条件;
- filter() 数组每一项都执行某个函数,返回该函数返回为true的项所组成的子数组;用于过滤掉不符合条件的函数;
- map() 数组每一项都执行某个函数,返回执行该函数后返回的结果组成的新数组;用于创建和原数组一一对应的新数组;
- 传入这些方法中函数接受三个参数:数组项 item,数组项的位置index,数组本身array
- 以上方法都对原数组无影响;
- 缩小方法
-
- reduce() 接受一个函数,该函数接受四个参数reduce(function( pre , cur , index , array){…………}) ,函数从数组的第二项开始执行,数组第一项 = pre ,数组的第二项即当前执行到的那一项= cur;然后第二次执行函数,用上一次函数返回的结果作为pre,数组的第三项作为cur,依次往后类推执行
- reduceRight() 跟reduce()原理一直,只是从数组倒数开始执行;