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的前面,小的在前,升序
}
}
- 比较器函数生成函数
function compare(prop){
return function(a,b){
if(a[prop]>b[prop]){
return -1;
} else {
return 1;
}
}
}
- 调用生成函数生成一个比较器函数,f为比较器函数
var f = compare("price")
- 将比较器函数作为参数传递给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标准库进行拓展