JS中数组的常用方法大汇总

数组中有很多常用方法 console.dir(Array.prototype);

TIPS:

1、方法的意义和作用 
2、方法的形参 
3、方法的返回值 
4、通过此方法,原来的数组是否发生了改变


实现数组的增加、修改、删除

var ary = [12,23,34];
//=>增加
1、push:向数组的末尾追加新内容
      参数:一到多个,任何数据类型都可以,想要给数组末尾追加什么,直接传递到push方法中即可,
      传递多个用逗号隔开
   返回值:新增后数组的长度
   原有数组改变了
2、unshift:向数组开头追加新内容
   参数:需要追加的内容(可以是多个任何数据类型的值)
   返回值:新增后数组的长度
   原来数组改变了
3、把数组当做一个普通的对象,使用对象键值对的操作,给其设置新的属性(索引)
  ary[ary.length]=xxx  向数组的末尾追加了新的内容

//=>删除
1、pop:删除数组最后一项
   参数:无
   返回值:被删除的那一项内容
   原有数组改变了
2、shift:删除数组第一项
   参数:无
   返回值:被删除那一项的内容
   原有数组改变了
使用shift删除第一项之后,后面每一项的索引都要向前进一位(导致后面项的索引发生改变)

3、把数组当做普通的对象操作
 delete删除:`delete ary[索引]`删除指定索引这一项(当前项被删除后,原有数组其它项的索引
      不会改变;当前数组的length也不会改变;)

 ary.length--:删除数组最后一项

splice:数组中内置的方法,可以实现数组的增加、修改、删除
1).splice实现删除
   splice(n,m):从索引n开始删除m个(m不写是删除到数组的末尾)
   返回值:被删除的内容(以一个新数组保存)
   原有数组改变了
   -> splice(0) 清空数组
   -> splice()  一项都不删除,返回一个新的空数组
   -> splice(0,1) 删除第一项
   -> splice(ary.length-1) 删除最后一项
2).splice实现修改
  splice(n,m,x):在原有删除的基础上,用x代替删除的内容
3).splice实现增加
  splice(n,0,x):在修改的基础上,我们一项都不删除,把x插入到索引n的前面
  -> ary.splice(0,0,x) 向数组开头追加新的内容
  -> ary.splice(ary.length,0,x) 向数组末尾追加新元素


数组的查询

slice:数组的查询

  参数:slice(n,m) 从索引n开始找到索引为m处(不包含m)

  返回值:把找到的部分以一个新数组返回

  原来的数组不变

  -> slice(n) 从索引n开始找到末尾

  -> slice(0) / slice() 数组克隆,克隆一份和原来数组一模一样的新数组

  -> slice支持负数索引,如果传递的索引为负数,浏览器解析的时候是按照 总长度+负数索引 来处理的

  ...


将两个数组进行拼接

concat:将多个数组拼接在一起
  参数:要拼接的内容(把内容放在原数组的后面),可以是一个数组,也可以是一些数据值
  返回:拼接后的新数组
  原有数组不变  
-> concat() 什么都没有拼接,相当于把原有数组克隆一份一模一样的新数组出来


把数组转换为字符串

1、toString:实现把数组转化为字符串(转换后的字符串以逗号分隔每一项)

   参数:无

   返回值:转换的字符串

   原有数组不变

2、join:把数组按照指定的分隔符转换为字符串,和字符串中的split相对应

   参数:指定的链接符

   返回值:转换后的字符串

   原有数组不变


思考:已知数组中的每一项都是数字,想实现数组求和,如何实现?

1、循环实现
var total=null;
for(var i=0;i<ary.length;i++){
    total+=ary[i];
}

2、利用join
var total = eval(ary.join('+')); //->evel:把字符串变为JS表达式执行


实现数组中每一项的排序和排列

1、reverse:把数组中的每一项倒过来排列
   参数:无
   返回值:排序后的数组
   原有数组改变 
2、sort:实现数组的排序
   参数:无或者回调函数
   返回值:排序后的数组
   原有数组改变
  
不传递参数的情况下:可以给10以内的数字进行升序排列,但是超过10的就无法处理了(多位数只识别第一位)  
ary.sort(function(a,b){
     return a-b; //->升序
     return b-a; //->降序
});


验证数组中是否包含某一项

indexOf / lastIndexOf:获取当前项在数组中第一次或者最后一次出现位置的索引
   数组中的这两个方法在IE6~8下不兼容
   字符串中的这两个方法兼容所有的浏览器
如果当前数组中并没有这一项,返回的索引是-1,我们根据这一点可以验证数组中是否包含这一项 

if(ary.indexOf(12)>-1){
    //->数组中包含12
}

Array.prototype.myIndexOf = function myIndexOf(value){
    var result = -1;
    for(var i=0;i<this.length;i++){
        if(value===this[i]){
            result = i;
            break;
        }
    }
    return result;
}
ary.myIndexOf(12)


遍历数组中每一项的方法

=>以下方法在IE6~8下都不兼容
forEach:遍历数组中的每一项
ary.forEach(function(value,index){
    //=>数组中有多少项,当前回调函数执行多少次;每一次传递进来的value就是当前遍历数组这一项的值,
    index就是遍历这一项的索引
});

map:遍历数组中的每一项,在forEach的基础上,可以修改每一项的值
ary.map(function(value,index){
    //=>数组中有多少项,当前回调函数执行多少次;每一次传递进来的value就是当前遍历数组这一项的值,
    index就是遍历这一项的索引
    return xxx; //=>RETURN后面返回的结果就是把当前遍历的这一项修改为xxx
});

filter
find
reduce
every
...