js数组不是真正的数组
典型的数组
- 元素的数据类型相同
- 使用连续的内存存储
- 通过数字下标获取元素
js数组
- 元素的数据类型不同
- 内存不一定是连续的(对象是随机存储的)
- 不能通过数字下标,而是通过字符串下标
创建数组
新建
let arr=[1,2,3]let arr=new Array(1,2,3)let arr=new Array(3)
转化
let arr='1,2,3'.split(',')let arr='123'.split('')- 将对象变为数组
Array.form('123') - 合并两个数组,得到新的数组
arr1.concat(arr2) - 截取一个数组的一部分 js只提供浅拷贝
arr1.slice(1)从第二个元素开始
删元素
- 删除头部的元素,返回被删元素。
arr.shift() - 删除尾部的元素,返回被删元素。
arr.pop() - 删除中间的元素,返回被删元素。
- 删除index的一个元素
arr.splice(index,1) - 并在删除的位置上加'x'
arr.splice(index,1,'x') - 并在删除的位置上加'x','y'
arr.splice(index,'x','y')
查看所有元素
- 查看所有属性名
let arr=[1,2,3,4,5];arr.x='xxx'
Object.keys(arr)
for(let key in arr){console.log(`${key}:${arr[key]}`)}
- 查看数字(字符串)属性名和值
for(lei i=0;i<arr.lrngth;i++)
{console.log(`${i}:${arr[i]}`)
}
arr.forEach(function(item,index)
{console.log(`${index}:${item}`)
})
forEach用for访问array的每一项
查看单个属性
- 索引越界
arr[arr,length]===undefinedarr[-1]===undefined
- 查找某个元素是否在数组里,存在返回索引,否则返回-1`arr.indexOf(item)
- 使用条件查找元素
arr.find(item=>item%2===0)
增加数组中的元素
- 在尾部加元素,返回新长度。
arr.push(newItem)arr.push(item,item2)
- 在头部加元素,返回新长度。
arr.unshift(newItem)arr.unshift(item,item2)
- 在中间添加元素
arr.splice(index,0,'x')arr.splice(index,0,'x','y')
修改数组中的元素
- 反转顺序
arr.reverse() - 自定义顺序
arr.sort((a,b)=>a-b)
数组变换
- map n变n
- filter n变少
- reduce n变1
伪数组
没有数组共有属性的数组就是伪数组。