JS中数组API的汇总

[TOC]
instanceof、Array.isArray()
toString()、valueOf()
push()、unshift()、concat()
shift()、pop()
indexOf、lastIndexOf、every()、filter()、forEach()、map()、some()
splice()增加或删除、slice()
reverse()、sort()
reduce()

关于这些api是否改变原数组的总结见另外我的另外一篇文章 是否改变原数组的常用方法归纳

检测数组

instanceof

1
value instanceof Array

问题在于它假定只有一个全局执行环境,如果网页中包含多个框架,那就存在两个以上的不同版本的Array构造函数


Array.isArray()

1
Array.isArray(value)

解决instanceof存在的问题,最终确定某个值是否是数组


转换方法

所有对象都具有toStringvalueOf方法

toString()

数组调用toString()方法会返回由数组每项的字符串形式拼接而成的一个以逗号分隔的字符串

1
2
var colors=['red', 'blue', 'green'];
colors.toString() //red,blue,green


valueOf()

1
2
var colors=['red', 'blue', 'green'];
colors.valueOf() //red,blue,green

增加项

push()

在数组末尾添加项,会改变原数组
返回值:数组的新长度

1
2
var colors=['red', 'blue', 'green'];
colors.push("white", "black");


unshift()

在数组头部添加元素,会改变数组
返回值:数组的新长度


concat()

合并两个或多个数组,不改变原数组
返回值:拼合后的新的数组

1
arrayObject.concat(arrayX,arrayX,......,arrayX)

jion()


shift()

将第一个元素删除,空即为undefined。
会改变原数组
返回值:删除元素


pop()

删除数组的最后一项
返回值:删除的元素


indexOf

indexOf(value,index):其中index(起点位置)是可选的。从数组开头开始查找,执行的是严格相等查找(===)
返回值:第一个找到的值的索引,如果没找到返回-1

lastIndexOf

lastIndexOf(value,index):其中index(起点位置)是可选的。从数组末尾开始向前查找,执行的是严格相等查找(===)
返回值:第一个找到的值的索引,如果没找到返回-1


every()

  • 不改变原数组
  • 语法:array.every(function(currentValue,index,arr), thisValue)
  • 原理说明:对数组的每一项都运行给定的函数,即把每一项都依次传入函数,如果该函数对数组的每一项都返回true,则返回true
  • 参数说明:
    • currentValue:数组传入的当前项
    • index:当前项在数组中的索引
    • arr:当前元素所属的数组,即array
    • thisValue:绑定this
  • 返回值:true/false
  • 示例:
    1
    2
    3
    4
    5
    var arr=[1,2,3,4,5,4];
    var everyResult=arr.every(function(val, index, array){
    return val>0;
    });
    console.log(everyResult); // true

filter()

  • 不改变原数组
  • 语法:array.filter(function(currentValue,index,arr), thisValue)
  • 原理说明:对数组的每一项都运行给定的函数,即把每一项都依次传入函数,返回该函数返回true的项组成的数组
  • 参数说明:
    • currentValue:数组传入的当前项
    • index:当前项在数组中的索引
    • arr:当前元素所属的数组,即array
    • thisValue:绑定this
  • 返回值:函数返回为true的项组成的新数组
  • 示例:
    1
    2
    3
    4
    5
    var arr=[1,2,3,4,5,4];
    var filterResult=arr.filter(function(val, index, array){
    return val>2;
    });
    console.log(everyResult); // [3,4,5,4]

forEach()

  • 不改变原数组
  • 语法:array.forEach(function(currentValue,index,arr), thisValue)
  • 原理说明:对数组的每一项都运行给定的函数,即把每一项都依次传入函数,该方法没有返回值
  • 参数说明:
    • currentValue:数组传入的当前项
    • index:当前项在数组中的索引
    • arr:当前元素所属的数组,即array
    • thisValue:绑定this
  • 返回值:无
  • 示例:
    1
    2
    3
    4
    5
    var arr=[1,2,3,4,5,4];
    var sum=0;
    var filterResult=arr.forEach(function(val, index, array){
    sum += item;
    });

map()

  • 不改变原数组
  • 语法:array.map(function(currentValue,index,arr), thisValue)
  • 原理说明:对数组的每一项都运行给定的函数,即把每一项都依次传入函数,该方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值,没处理也保留在新数组中
  • 参数说明:
    • currentValue:数组传入的当前项
    • index:当前项在数组中的索引
    • arr:当前元素所属的数组,即array
    • thisValue:绑定this
  • 返回值:返回一个新数组,是由每次函数调用的结果组成的数组

some()

  • 不改变原数组
  • 语法:array.map(function(currentValue,index,arr), thisValue)
  • 原理说明:对数组的每一项都运行给定的函数,即把每一项都依次传入函数,数组的任意一项返回true,则返回true
  • 参数说明:
    • currentValue:数组传入的当前项
    • index:当前项在数组中的索引
    • arr:当前元素所属的数组,即array
    • thisValue:绑定this
  • 返回值:true/false

splice()增加或删除

  • 会改变原数组
  • 语法:array.splice(index,howmany,item1,.....,itemX)
  • 功能:删除数组中元素或向数组中插入元素
  • 参数说明:
    • index:从何处开始增加或删除
    • howmany:删除多少项
    • item1,…..,itemX:添加的元素
  • 返回值:返回被删除的元素组成的数组,如果是增加的话则没有返回值
  • 删除: splice(从何处开始删index,项数)
  • 插入:splice(插入到谁后面index,0,要增加的元素)

slice()

  • 不改变原数组
  • 语法:array.slice(start, end)
  • 功能:提取数组中元素生成新数组
  • 参数说明:
    • start:从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。-1 指最后一个元素
    • end:在end之前结束选取,不包含end
  • 返回值:返回一个新的数组,包含从 start 到 end (不包括该元素)的元素

数组排序

reverse()

sort()

sort() 方法可以接受一个 方法为参数 ,这个方法有两个参数。分别代表每次排序比较时的两个数组项。sort()排序时每次比较两个数组项都回执行这个参数,并把两个比较的数组项作为参数传递 给这个函数。当函数返回值为1的时候就交换两个数组项的顺序,否则就不交换。


归并

reduce()


【持续更新中…】

热评文章