数组对象----一种特殊的对象
js其实没有真正的数组---只是用对象模拟数组
- 典型的数组
- 元素的数据类型相同
- 元素连续的内存存储
- 通过数字下标获取元素

- 但js的数组不这样
- 元素的数据类型可以不同
- 内存不一定是连续的(对象是随机存储的)
- 不能通过数字下标,而是通过字符串下标
- 这意味着数组可以有任何key
- 比如
- let arr =[1,2,3]
- arr['xxx']=1

创建一个数组
- 新建
- let arr =[1,2,3]
- let arr =newArray(1,2,3)
- let arr =newArray(3)
- 转化
- let arr ='1,2,3'.split(',')
- let arr ='123'.split('')
- Array.form('123')

- 伪数组
- let divList =document.querySelectorAll('div')
- 伪数组的原型链并没有数组的原型(没有push,pop) ---第一步就是转化成正常数组
- 创建一个数组(续)
- 合并两个数组,得到新数组
- arr1.concat(arr2)

- 截取一个数组的一部分
- arr1.slice(1)//从第二个元素开始
- arr1.slice(0)//全部截取
- 注意,JS只提供浅拷贝
删除元素
- 跟对象一样
- let arr =['a','b','c']
- delete arr ['0']
- arr//[empty,'b','c']
- 神奇,数组长度并没有变
- 稀疏数组
- 如果直接改length可以删除元素吗?
- let arr =[1,2,3,4,5];
- arr.length =1
- 我x,居然可以?
- js真神奇
- 重要:不要随便改length
删元素续
- 删除头部的元素
- arr.shift()//arr被修改,并范湖被删元素
- 删除尾部的元素
- arr.pop()//arr被修改,并返回被删元素
- 删除中间元素
- arr.splice(index,1)//删除index的一个元素
- arr.splice(index,1,'x')//并在删除位置添加'x'
- arr.splice(index,1,'x','y')//并在删除位置添加'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(let i=0;i<arr.length;i++){
- console.log(`${i}:${i}`)
- }
- let arr =[1,2,3,4,5]
- arr.x='x'

- 你要自己让i从0增长到length-1
- arr.forEach(function(item,index){
- console.log(`${index}:${item}`)
- })

- 也可以用forEach/map等原型上的函数
- 查看元素中使用for循环和forEach区别 forEach不支持, continue 和break
forEach是一个槛
- 自己写forEach才能理解forEach
function forEach(array.fn){
for(let i =0;i<array.length;i++){
fn(array[i],i,array)
}
}- forEach用for访问array的每一项
- 对每一项调用fn(array[i],i,array)
- 为什么要传入array呢?不为什么,规定如此
查看单个属性
- 跟对象一样
- let arr =[111,222,333]
- arr[0]
- 索引越界
- arr[arr.length]===undefined
- 举例
- for(let i=0;i<=arr.length;i++){
- console.log(arr[i].toString())
- }
- 报错 Cannot read property 'toString'of undefined


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



增加数组中的元素(防止变成稀疏数组)
- 在尾部加元素
- arr.push(newltem)//修改arr,返回新长度
- arr.push(item1,item2)//修改,返回新长度

- 在头部增加元素
- arr.unshift(newltem)//修改arr,返回新长度
- arr.unshift(item1,item2)..修改arr,返回新长度

- 在中间添加元素
- arr.splice(index,0,'x')//在index处插入'x'
- 在下标,什么都不删 插入 x
- arr.splice(index,0,'x','y')

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

著名面试题,如何把字符串换个方向




数组变换

- map
- n变n

- filter
- n变少

- reduce
- n变1

- 替代map

- 代替filter


本文深入探讨JavaScript数组的特点与操作方法,包括数组的创建、合并、截取、元素增删及查找等核心功能,并介绍了一些特殊技巧。
372

被折叠的 条评论
为什么被折叠?



