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;

  1. push 尾部插入 (改变原数组)
    alert(arr.push());// 尾部插入,返回数组新长度

  2. pop 尾部删除 (改变原数组)
    alert(arr.pop());//尾部删除,返回被删除的元素,默认删除数组最后一个元素

  3. unshift 头部插入 (改变原数组)
    alert(arr.unshift());//头部插入,返回数组新长度

  4. shift 头部删除 (改变原数组)
    alert(arr.shift());返回被删除的元素,默认删除第一个

  5. splice 删除/插入 (改变原数组)
    alert(arr.splice(2,1));//
    splice:删除插入操作,返回的是被删除的子数组,如果没删则返回空数组

  6. reverse 反转数组 (原数组不变)
    alert(arr.reverse());//返回反转的数组

  7. 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','','王五'];
  1. join 将数组中的元素拼接成字符串并返回 (原数组不变)
    split 将一个字符串分割成一个数组
>   alert(arr.join('||'));
>   var str='hello gafgfg';
>   alert(str.split(''));
>   alert(str.split('').reverse().join(''));
	str.split('')将str字符串分割为一个数组,用reverse进行反转,再用join拼接成字符串
  1. slice:截取数组中的子数组(原数组不变)
    // alert(2,3);//第一个参数是开始处,第二个是结束处

  2. indexOf 找出目标元素在数组中的从零开始的下标位置,如果没有返回-1;
    // alert(arr.indexOf(‘李四’,-2));//第二个参数是从哪开始

  3. forEach 使用指定的方法依次迭代数组中的每一个元素,可以没有返回值。主要是迭代的过程
    // arr.forEach(function(v,i,arr){
    // alert(v+’:’+i+’:’+arr);
    // });//v是当前元素本身,i是元素在整个数组中的下标,arr是整个数组

  4. map 将原数组按参数规则进行处理产生新的数组并返回。原数组并未改变,所有没有返回值得不到map所要的到的结果
    // var result=arr.map(function(v,i){
    // return v+i; //v是元素本身,i是所在下标,使用map时应该显示return。
    // })
    // alert(result);

  5. every 检验数组中是不是每一个元素都符合函数参数验证,函数参数应该返回一个boolean类型的结果,如果每一个都符合,返回true,否则就为false

// var result=arr1.every(function(v,i,arr1){
// return v.age>=10;
// })
// alert(result);

  1. some 检验数组中是不是存在符合函数参数验证的元素,只要存一个就返回真,否则假,函数参数应该返回一个boolean类型的结果,如果有一个符合,返回true,全部不符合,返回false。

// var result=arr1.some(function(v,i,arr1){
// return v.height>172;
// });
// alert(result)

  1. filter 过滤按参数函数规则对原数组进行过滤,符合条件的留下,作为返回数组中的元素,否则pass,函数参数返回一个boolean类型的结果

var result=arr.filter(function(v,i,arr){
return v>50;
});
alert(result);

  1. 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);

  1. 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;
    });
}
  1. groupBy 分组
    这个方法并不是Array本身拥有的,是自定义的方法, 用于数组分组。具体使用可以移步这里,小案例中使用到了groupBy方法。
  2. Array.isArray 判断一个对象是否为数组
    // 等效于Object.prototype.toString.call(obj)===’[Object Array]’;
  3. concat 连接两个或更多的数组,并返回新数组,但是对原数组没有任何影响。

附加:
js数组常用方法总结

注:将类数组转换成纯数组:

Array.prototype.slice.call(lis,0);