JS之数组中的API(引用程序编程接口)库

从两种角度来分析数组钟得API库:

1、静态方法(构造函数方法)

(1)Array.isArray(arr)
    判断参数arr是否是数组
> var n = [1,2,3];		//undefined
> n						//[ 1, 2, 3 ]
> var m=1;				//undefined
> m						//1
> Array.isArray(n)		//true
> Array.isArray(m)		//false

(2) Array.of()
es6中的方法,将参数放到数组中返回

Array.of(3)     //[3]
Array.of(3,4)   //[3,4]

2、 非静态方式(构造函数原型中的方法,实例方法)

1. 循环类
Array.prototype.forEach(handler)
作用:遍历指定数组
参数:回调函数,可以接受3个参数(item,index,arr) forEach方法每次 遍历出来一个元素后都执行该回调函数。
返回值:undefined
arr.forEach(function(item,index,arr){
})
item 为每次遍历出来的元素, index为遍历时候的索引,arr为当前正在遍历的数组
Array.prototype.every(handler)
作用:遍历指定数组,判断是否每个元素都满足指定条件
参数:回调函数,可以接受3个参数(item,index,arr),该回调函数会返
回一个boolean值,当所有回调函数返回true,最终every方法的结果为
true, 当有一个回调函数返回了false,该函数中止,every方法的结果为
false
返回值:boolean
Array.prototype.some(handler)
作用:遍历指定数组,判断是否有元素都满足指定条件
参数:回调函数,可以接受3个参数(item,index,arr),该回调函数会返
回一个boolean值,当有回调函数返回true,该函数中止,最终every方
法的结果为true, 当所回调函数返回了false,every方法的结果为false
返回值:boolean
Array.prototype.map(handler)
作用:从指定元素中映射出某些值,组成新的数组返回
参数:回调函数,可以接受3个参数(item,index,arr),该回调函数会返
回一个数组,数组元素为每个回调函数返回的值
返回值:Array
Array.prototype.filter(handler)
作用:从指定中过滤出满足条件的元素,组成新的数组返回
参数:回调函数,可以接受3个参数(item,index,arr),该回调函数会返
回一个数组,数组元素为回调函数返回值为true的那个元素
返回值:Array
2. 栈方法 : 后进先出结构
Array.prototype.push(v) 【原值改变】
作用:入栈,为指定数组添加元素,该元素添加到数组的末尾
参数:可以多个任意类型的数组
返回值:数组的长度
var arr = [1,2,3];
arr.push(4,5,6) // arr [1,2,3,4,5,6]
Array.prototype.pop() 【原值改变】
作用:出栈,将数组末尾的值删除并且返回
参数:
返回值:出栈的元素
var arr = [1,2,3];
arr.pop() // arr [1,2] 返回值3
3. 队列方法:先进先出
Array.prototype.shift() 【原值改变】
作用:出队列,将数组开头的值删除并且返回
参数:
返回值:出队列的元素
Array.prototype.unshift() 【原值改变】
作用:在数组开头插入一个值删除并且返回数组长度
参数:值
返回值:数组长度
4. 排序方法
反转序列
Array.prototype.reverse() 【原值改变】
作用:将数组中的元素反转
参数:
返回值:反转之后的数组
Array.prototype.sort() 【原值改变】
作用:排序, 如果没有参数,将会按照字符串[如果是其他数据类型,
先转换成字符串]的顺序进行排序;如果参数由比较器函数,则按照比
较器函数规则进行排序
参数:无 或 比较器函数,比较器函数接受两个参数,a,b,当a>b返回1,a<=b返回-1,正序。
返回值:排序后的数组
当比较器函数返回值大于0,a排在b的后面,

function(a,b){
  if(a>b){
    return 1;     // a排在b的后面,大的在后面,升序
  } else  {
    return -1;    // a排在b的前面,小的在前,升序
  }
}
  1. 比较器函数生成函数
function compare(prop){
    return function(a,b){
      if(a[prop]>b[prop]){
        return -1;
      } else {
        return 1;
      }
    }
  }
  1. 调用生成函数生成一个比较器函数,f为比较器函数
var f = compare("price")
  1. 将比较器函数作为参数传递给sort
goods.sort(f);

—等价于—

goods.sort((function(prop){
    return function(a,b){
      if(a[prop]>b[prop]){
        return -1;
      } else {
        return 1;
      }
    }
  })("price"));

5. 数组分割函数
Array.prototype.slice(begin,end) 【原值不改变】
作用:从指定数组中获取子数组,不改变原值。
参数:begin开始位置;end结束位置,不包含结束位置,end可以省
略,截取到数组末尾
返回值:截取的子数组
Array.prototype.splice(begin,len,a,b,c…) 【原值改变】
作用:删除,替换,插入
参数:begin开始位置;len删除的元素个数,a,b,c插入的元素
返回值:删除元素组成的数组
6. 数组元素查找
Array.prototype.indexOf(item)
作用:从数组前往后查找item所在的索引,找到之后不再检索
参数:要查找的元素值
返回值:索引/-1
Array.prototype.lastIndexOf(item)
作用:从数组后往前查找item所在的索引,找到之后不再检索
参数:要查找的元素值
返回值:索引/-1
7. 数组合并
Array.prototype.concat() 【原值不改变】
作用:合并数组
参数:数组
返回值:合并后的数组
8. 数组的序列化
Array.prototype.join(s)
将数组转换为字符串,通过s分割开数组中每个元素。
JSON.stringify() // es标准
querystring.stringify() // nodejs,浏览器(第三方)
9. 拓展
(1) mdn进行拓展,有个别的es标准的api
(2) 第三方库 : lodash.js
对数组,对象,函数等es标准库进行拓展