js常用数组操作

216 阅读3分钟

js常用数组操作

  • 数组的每一项都可以是任意值
  • 数组的length属性不是只读的可以通改变数组的length值来改变数组长度(进行截取或扩充,扩充的无值项会被初始化为undefined)
  • 判断变量是否为数组 list instanceof Array(但这种方式并不适用所有情况)如:list变量在一个iframe中被创建,当使用这种方法判断时会返回false,原因在于Array时windows对象的属性,list在内部创建使用的并不是windows.Array构造方法
  • ES5提供Array.isArray(list)方法解决上述问题但兼容性支持到IE9+

数组方法

转换方法
  1. toString 返回值是字符串 将数组的每项转化为字符串并将所有项用,连接到一起
  2. valueOf 返回值是数组 对数组的每一项调用toString方法??? 此处存在疑问,上述解释来自红宝书,但实际结果如下
var str1=[1,3,"sferg",["bml","123"]]
str1.valueOf()  //[1, 3, "sferg", Array(2)]
str1.valueOf()[3] instanceof String //false
  1. toLocalString
数组模拟数据结构
  1. 栈(后进先出) list.push() 数组最后增加一项,返回数组的长度 list.pop()去除数组的最后一项,返回去除的项
  2. 队列(尾进头出) list.push() list.shift()移除数组的第一项并返回该项
  3. 反向队列(头进尾出) list.unshift() 在数组的第一项插入并返回数组长度 list.pop()
数组的排序

list.reverse() 逆序 list.sort() 接收一个函数作为参数

function compare(v1,v2){
    if(v1<v2){
        return -1   //第一个数在第二个数前边则返回-1
    }else if(v1>v2){
        return 1
    }else{
        return 0
    }
}
list.sort(compare)
数组的增删改查
  1. list.concat(...) 将新的元素插入到数组的最后
  2. list.slice() 截取数组的某几项 ,接收一个参数则从该参数指定位置起截取到末尾;接受两个参数则截取从第一个参数位置到第二个参数位置的项,不包括最后一个参数位置的项
  3. list.splice() 插入操作:接收三部分参数,插入位置,删除项数,插入元素(可为多个) 删除操作:接受两个参数 起始位置,删除项数 返回删除的项组成的数组,若未删除则为空数组
数组元素的查找
  • list.indexOf("sdff") 从前向后查找某项的位置,返回所在下标,若没找到则返回-1 ( ===全等查找 )
  • list.indexOf(1,"sd") 增加查找的起始位置
  • lastIndexOf()用法相同但是是从后向前查找
数组的遍历

接收一个函数作为参数,该函数保存三个参数 item(数组项的值) index(数组项的索引) array(数组本身)

  • every() 每一项都符合函数定义的要求 返回true 否则返回false
  • forEach() 对数组的每一项执行相同的函数中定义的操作 无返回值
  • some() 有至少一项符合函数定义的要求 返回true 否则返回false
  • filter() 选择数组中符合函数定义的要求的项 返回符合要求的项组成的数组
  • map() 对每一项执行函数定义的操作,返回操作后的项组成的数组
以filter为例
var result = numList.filter(function(item,index,numList){
	return item>2
})
result  // [4, 5, 6, 7, 4, 34, 4]
归并方法
  • reduce和reduceRight 接收一个函数作为参数,该函数保存四个参数pre(前面项执行后所得结果) item(数组项的值) index(数组项的索引) array(数组本身)
var list = [1,3,4,5,3]
var count = list.reduce(function(pre,item,index,arr){
	return pre + item
})
count//16
判断变量是否为数组
var list = [1,2,3,4,5]
Array.isArray(list)  //true
list instanceof Array //true
list.constructor === Array //true
toString.call(param)