JS数组
JS其实没有真正的数组,只是用对象模拟数组
- 典型的数组
- 元素的数据类型相同
- 使用连续的内存存储
- 通过数字下标获取元素
- JS 数组
- 元素的数据类型可以不相同
- 内存不一定是连续的(对象是随机存储的)
- 不能通过数字下标,而是通过字符串下标
- 也就是说数组可以有认可key,比如
arr['xxx'] = 1
增
- 创建
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')
- 伪数组
- 比如
let arr = {0:'a', 1:'b',length:2}
- 伪数组的原型链中并没有数组的原型
- 没有数组共用属性的数组就是伪数组
- 比如
- 合并数组
arr1.concat(arr2)
- 合并两个数组,得到一个新数组,不会改变原来的两个数组
- 截取数组的一部分
arr1.slice(1)
从第二个元素开始arr1.slice(0)
全部截取,经常用于复制数组
删
- 删除元素
let arr = ['a', 'b', 'c']
delete arr['0']
//arr = [empty, 'b', 'c']
//数组的长度没有变
如果直接改length
,如果length
小于原来的,会直接删除后面的元素,不要随便修改length
以上两种方法不建议使用,建议时候以下方法:
- 删除头部元素
arr.shift()
- 删除尾部元素
arr.pop()
- 删除中间元素
arr.splice(index,1)
删除index的一个元素arr.splice(index,1,'x')
删除index的一个元素,并在删除位置添加’x’arr.splice(index,1,'x','y')
删除index的一个元素,并在删除位置添加’x’,‘y’
查
- 查看数字(字符串)属性名和值
for(let i = 0; i<arr.length; i++){
console.log(`${i}: ${arr[i]}`)
}
arr.forEach(function(item,index){
console.log(`${index}: ${item}`)
}
// forEach的写法
function forEach(array,fn){
for(let i = 0; i<array.length; i++){
fn(array[i],i,array)
}
}
- 查看单个属性
arr[0]
- 索引越界
arr[arr.length] === undefined
arr[-1] === undefined
- 查看某个元素是否在数组里
arr.indexOf(item)
存在返回索引,不存在返回-1
- 使用条件查找元素
arr.find(item => item%2 === 0)
找第一个偶数
- 使用条件查找元素的索引
arr.findIndex(item => item%2 === 0)
增
- 在尾部加元素
arr.push(newItem)
修改arr,返回新长度arr.push(item1,item2)
- 在头部加元素
arr.unshift(newItem)
arr.unshift(item1,item2)
- 在中间添加元素
arr.splice(index,0,'x')
在index处插入’x’arr.splice(index,0,'x','y')
- 反转顺序
arr.reverse()
修改原数组
- 自定义顺序
arr.sort((a,b) => a-b)
当返回的值>0,认为左边大,当返回的值小于0,认为右边大
数组变换
以下三个方式都不会改变原数组
- map
- n 变 n
比如需要一个数组里的每个值变为原来的平方,可以使用arr.map(item => item*item)
- n 变 n
- filter
- n 变少
比如只需要数组里的偶数,可以使用arr.filter(item => item%2 === 0)
- n 变少
- reduce
- n 变1
- 比如需要得到数组里值的总和,可以使用
arr.reduce((sum, item) => {return sum+item},0)
- 比如需要一个数组里的每个值变为原来的平方,可以使用
arr.reduce((result,item) => {return result.concat(item*item)},[])
- 比如只需要数组里的偶数,可以使用
arr.reduce((result,item) => result.concat(item%2 === 1 ? [] : item),[])