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)
, [])