js数组常用方法总结
js数组常用的方法主要有push、 pop、unshift、shift、splice、reverse、sort、join、slice、indexOf 、forEach、map、 every、some、filter、reduce、reduceRight、groupBy
数组常用方法:
var arr=[‘78’,‘96’,‘45’]; // arr的原型是array.prototype;
-
push 尾部插入 (改变原数组)
alert(arr.push());// 尾部插入,返回数组新长度 -
pop 尾部删除 (改变原数组)
alert(arr.pop());//尾部删除,返回被删除的元素,默认删除数组最后一个元素 -
unshift 头部插入 (改变原数组)
alert(arr.unshift());//头部插入,返回数组新长度 -
shift 头部删除 (改变原数组)
alert(arr.shift());返回被删除的元素,默认删除第一个 -
splice 删除/插入 (改变原数组)
alert(arr.splice(2,1));//
splice:删除插入操作,返回的是被删除的子数组,如果没删则返回空数组 -
reverse 反转数组 (原数组不变)
alert(arr.reverse());//返回反转的数组 -
sort:对数组进行排序(默认升序,可以给sort函数一个参数,而且这个参数本身是一个函数,用于进行比较排序) (原数组不变)
程序开发的一个原则:开闭原则:对修改关闭,对扩展开放
//降序
> function sortRule(pro,isAsc){
> return function(a,b){
> return isAsc?a[pro]-b[pro]:b[pro]-a[pro];
> };
> }
> arr.sort('weight',true);
> arr.sort(function(a,b){
> return a.age-b.age;
> })
alert(arr1);
升序
// arr.sort(); ==arr.sort(function(a,b){return a-b;})//升序
// alert(arr);
// return this;
// arr.sort(function(a,b){
// return b-a;//降序
// })
// alert(arr);
例子:
var arr1=[
// {name:'张三',age:"13",height:"172"},
// {name:'李四',age:"15",height:"171"},
// {name:'王五',age:"14",height:"173"}];
// //程序开发的一个原则:开闭原则:对修改关闭,对扩展开放
// function sortRule(pro,isAsc){
// return function(a,b){
// return isAsc?a[pro]-b[pro]:b[pro]-a[pro];
// };
// }
// arr.sort('weight',true);
// arr.sort(function(a,b){
// return a.age-b.age;
// })
// alert(arr1);
//
var arr=['lisi','wang','','王五'];
-
join 将数组中的元素拼接成字符串并返回 (原数组不变)
split 将一个字符串分割成一个数组
> alert(arr.join('||'));
> var str='hello gafgfg';
> alert(str.split(''));
> alert(str.split('').reverse().join(''));
str.split('')将str字符串分割为一个数组,用reverse进行反转,再用join拼接成字符串
-
slice:截取数组中的子数组(原数组不变)
// alert(2,3);//第一个参数是开始处,第二个是结束处 -
indexOf 找出目标元素在数组中的从零开始的下标位置,如果没有返回-1;
// alert(arr.indexOf(‘李四’,-2));//第二个参数是从哪开始 -
forEach 使用指定的方法依次迭代数组中的每一个元素,可以没有返回值。主要是迭代的过程
// arr.forEach(function(v,i,arr){
// alert(v+’:’+i+’:’+arr);
// });//v是当前元素本身,i是元素在整个数组中的下标,arr是整个数组 -
map 将原数组按参数规则进行处理产生新的数组并返回。原数组并未改变,所有没有返回值得不到map所要的到的结果
// var result=arr.map(function(v,i){
// return v+i; //v是元素本身,i是所在下标,使用map时应该显示return。
// })
// alert(result); -
every 检验数组中是不是每一个元素都符合函数参数验证,函数参数应该返回一个boolean类型的结果,如果每一个都符合,返回true,否则就为false
// var result=arr1.every(function(v,i,arr1){
// return v.age>=10;
// })
// alert(result);
- some 检验数组中是不是存在符合函数参数验证的元素,只要存一个就返回真,否则假,函数参数应该返回一个boolean类型的结果,如果有一个符合,返回true,全部不符合,返回false。
// var result=arr1.some(function(v,i,arr1){
// return v.height>172;
// });
// alert(result)
- filter 过滤按参数函数规则对原数组进行过滤,符合条件的留下,作为返回数组中的元素,否则pass,函数参数返回一个boolean类型的结果
var result=arr.filter(function(v,i,arr){
return v>50;
});
alert(result);
-
reduce 收缩 将数组中所有的元素收缩成一个元素,可以应用于求最大(小)值,求和等。
reduce() 方法接收一个函数 callback 作为累加器(accumulator),数组中的每个值(从左到右)开始合并,最终为一个值。
语法
array.reduce(callback[, initialValue])
reduce() 方法接收 callback 函数,而这个函数包含四个参数:
function callback(accumulator, currentValue, currentIndex, array){}
accumulator : 上一次调用回调返回的值,或者是提供的初始值(initialValue)
currentValue :数组中当前被处理的数组项
currentIndex : 当前数组项在数组中的索引值
array : 调用 reduce() 方法的数组
而 initialValue 作为第一次调用 callback 函数的第一个参数。
reduce() 方法为数组中的每一个元素依次执行回调函数 callback,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 reduce() 的数组。
回调函数第一次执行时,accumulator 和 currentValue 可以是一个值,如果 initialValue 在调用 reduce() 时被提供,那么第一个 accumulator 等于 initialValue ,并且 currentValue 等于数组中的第一个值;如果 initialValue 未被提供,那么 accumulator 等于数组中的第一个值,currentValue 等于数组中的第二个值。
// var max=arr.reduce(function(a,b){
// return a>b?a:b;
// });
// alert(max);
-
reduceRight 从右开始收缩
reduceRight() 方法的功能和 reduce() 功能是一样的,不同的是 reduceRight() 从数组的末尾向前将数组中的数组项做累加。
reduceRight() 首次调用回调函数 callback 时,accumulator 和 currentValue 可以是两个值之一。
如果调用 reduceRight() 时提供了 initialValue 参数,则 accumulator 等于 initialValue,currentValue 等于数组中的最后一个值。
如果没有提供 initialValue 参数,则 prevValue 等于数组最后一个值, currentValue 等于数组中倒数第二个值。
var arr = [0,1,2,3,4];
arr.reduceRight(function (accumulator, currentValue, currentIndex, array) {
return accumulator + currentValue;
}); // 10
练习:不要使用JavaScript内置的parseInt()函数,利用map和reduce操作实现一个string2int()函数:
'use strict';
function string2int(s) {
return s.split("").map(function(item) {
return item * 1;
}).reduce(function(x, y) {
return x * 10 + y;
});
}
-
groupBy 分组
这个方法并不是Array本身拥有的,是自定义的方法, 用于数组分组。具体使用可以移步这里,小案例中使用到了groupBy方法。 - Array.isArray 判断一个对象是否为数组
// 等效于Object.prototype.toString.call(obj)===’[Object Array]’; - concat 连接两个或更多的数组,并返回新数组,但是对原数组没有任何影响。
附加:
注:将类数组转换成纯数组:
Array.prototype.slice.call(lis,0);