JS对象__数组

180 阅读2分钟

JS数组

创建一个数组

  • 新建
  let arr = [1,2,3]
  let arr = new Array(1,2,3)
  let arr = new Array(3) //创建一个length = 3 的数组
  • 转化
  let arr = '1,2,3'.split(',')
  let arr = '123'.split('') 
  Array.from('123') //结果均为 ['1', '2', '3']
  • 伪数组
  let divList = document.querySelectorAll('div')

伪数组的原型链中并没有数组的原型,即没有数组共用属性的「数组」就是伪数组
一般用 Array.from() 把伪数组变为数组

  • 合并两个数组,得到新数组
  arr1.concat(arr2)
  • 截取一个数组的一部分
  arr1.slice(1) //从第二个元素开始
  arr1.slice(0) //全部截取(浅拷贝)

注意:JS只提供浅拷贝

数组中的元素——增删改查

1. 删元素

  • 删除头部的元素
  arr.shift() //arr被修改,并返回被删元素
  • 删除尾部的元素
  arr.pop() // arr被修改,并返回被删元素
  • 删除中间的元素(也可以添加)
  arr.splice(index,1) //删除index的一个元素
  arr.splice(index,1,'x') //删除index的一个元素,并在删除位置添加'x'
  arr.splice(index,1) //删除index的一个元素,并在删除位置添加'x','y'

注意:不要随便改length

2.1 查看所有元素

  • forEach
// 查看数字(字符串)属性名和值
  arr.forEach((item,index,array)=>{
    console.log(`${index}:${item}`)
  })

2.2 查看单个属性

  • 注意索引越界
  arr[arr.length] === undefined
  arr[-1] === undefined

索引越界会报错:Cannot read property 'toString' of undefined

  • 查找某个元素是否在数组里
  arr.indexOf(item) //存在返回索引,否则返回 -1
  • 使用条件查找元素
  arr.find(item => item % 2 === 0) //找第一个偶数
  • 使用条件查找元素的索引
  arr.findIndex(item => item % 2 === 0) //找第一个偶数的索引

3. 增加数组中的元素

  • 在尾部加元素
arr.push(newItem) //修改arr,返回新长度
arr.push(item1, item2) //修改arr,返回新长度
  • 在头部加元素
arr.unshift(newItem) // 修改arr,返回新长度
arr.unshift(item1, item2) // 修改arr,返回新长度
  • 在中间添加元素
arr.splice(index,0,'x') //在index处插入'x'
arr.splice(index,0,'x','y')

4. 修改数组中的元素

  • 反转顺序
arr.reverse() //修改原数组
  • 自定义顺序
arr.sort((a,b) => a-b)

5. 数组变换

  • map : n 变 n
  arr.map(item => item * item)
  • filter : n 变 少
  arr.filter(item => item % 2 === 0)
  • reduce : n 变 1
// 计算总和
  let arr = [1,2,3,4,5,6]
  arr.reduce((sum, item) => {
    return sum + item
  }, 0) // 0是初始化sum的值

reduce 可以代替 map :

  // 返回每个元素的平方
  // 输出[1,4,9,16,25,36]
  let arr = [1,2,3,4,5,6]
  arr.reduce((result, item) => {
    return result.concat(item * item)
  }, []) 

reduce 可以代替 filter :

  // 返回偶数
  // 输出[2,4,6]
  let arr = [1,2,3,4,5,6] 
  arr.reduce((result, item) => 
    result.concat(item % 2 === 1 ? [] : item)
  , [])