JS数组
1. 数组对象
- js没有真正的数组,是用对象模拟的数组
let arr= [1,2,3]
typeof arr
arr instanceof Object
arr instanceof Array
instanceof在判断数组是,即会把数组当做Array类型,又会把数组当做Object类型,都会返回true。
- JS数组不是典型的数组。
- 典型的数组: 元素数据类型相同、使用连续存储、通过数字下标获取元素。
- JS数组:
- 元素类型可以不同
- 内存不一定个连续
- 不通过数字下标,而是通过字符串下标。说明下标可以是任何key.
2. 创建一个数组
- 新建数组
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.from('123')
- 伪数组
- 没有数组公用属性的数组就是伪数组
- Array.from :类数组转为数组
- 伪数组的原型链没有数组的原型。
- 合并2个数组(得到一个新的数组)
arr1=[1,2,3]
arr2=[4,5,6,7]
arr1.concat(arr2)
- 截取数组的一部分
3.删除
- 操作
let arr = [1,2,3,4]
delete arr['1']
arr // (4) [1, empty, 3, 4]
- 修改length可以删除数组元素,所以不要随意修改数组的length

- 删除头部元素
let arr = [1,2,3,4,5,6,7,8]
arr.shift()
arr // (7) [2, 3, 4, 5, 6, 7, 8]
- 删除尾部元素
let arr = [1,2,3,4,5,6,7,8]
arr.pop()
arr // (7) [1, 2, 3, 4, 5, 6, 7]
- 删除中间元素
- splice()用法,利用它可以实现在指定位置删除、替换、插入指定数量的元素。
- 方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。
arr.splice(index,1)
arr.splice(index, 1, 'x')
arr.splice(index, 1,'x','y')
4. 查看属性
- 查看所有属性名
let arr = [1,2,3,4,5,6,7,8]
arr.x=
Object.keys(arr) // (9) ["0", "1", "2", "3", "4", "5", "6", "7", "x"]
for (let key in arr){
console.log(`${key}:${arr[key]}`)
}
//=>
0:1
1:2
2:3
3:4
4:5
5:6
6:7
7:8
x:xxx
- 查看单个属性
arr[arr.length] === undefined
- 查找某个元素是否在数组中
arr.indexOf(item)
- 使用条件查找元素
arr.find(item => item%2 ===0)// 找第一个偶数
- 使用条件查找元素索引
arr.findIndex(item => item %2 ===0) //找第一个偶数的索引
- for和forEach的区别:
- for可以break和continue。forEach没有,只能一次走到结尾。
- for是块级作用域。forEach是函数作用域
- 总结index, find ,findindex,
5. 增加元素
- 尾部添加元素
arr.push(item)
- 头部添加
arr.unshift(item)
- 中间插入
arr.splice(index,0,x,y) // index处插入x,y
6. 修改数组元素
- 翻转顺序
arr.reverse()
- 自定义顺序
//sort:
let arr = [{name:'小米', age:18},{name:'红', age:48},{name:'小蓝', age:53}]
arr.sort()
/* 0: {name: "小米", age: 18}
1: {name: "红", age: 48}
2: {name: "小蓝", age: 53}
length: 3
__proto__: Array(0)
*/
arr.sort(function(a,b){
if(a.age > b.age){return 1}
else if(a.age = b.age){return 0}
else {return -1}
})
//可以简写为
arr.sort((a,b )=>{
return a.age - b.age
})
7.数组变换
map
- n变n.
- 一一映射
let arr = [1,2,3,4,5,6,7,8]
//map
arr.map(item => item * item) //(8) [1, 4, 9, 16, 25, 36, 49, 64]
filter
- n变少
let arr = [1,2,3,4,5,6,7,8]
arr.filter(item=>item %2 ===0?true:false)
arr.filter(item=>item %2 ===0) //(4) [2, 4, 6, 8]
reduce
- n变1
let arr = [1,2,3,4,5,6,7,8]
arr.reduce((result, item )=>{
result.concat(item % 2 ===1 ? []:item)
},[])