数组:一种特殊的对象(JS其实没有真正的数组,只是用对象模拟数组)
JS的数组不是典型数组
典型的数组:
元素数据相同
使用连续的内存存储
通过数字下标获取元素
JS数组
元素的数据类型可以不同
内存不一定是连续的(对象是随机存储的)
不能通过数字下标,而是通过字符串下标(这意味着数组可以有任何key)
创建一个数组
新建:
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 = ‘1,2,3’.split(‘’) //用空字符串分隔
Array.from(‘1,2,3’) //转化为数组
伪数组的原型链中并没有数组的原型,也就是没有数组共用属性的【数组】
合并两个数组,得到新数组
arr1.concat(arr2)
截取一个数组的一部分
arr.slice(1) //从第二个元素开始
arr.slice(0) //全部截取
注意:JS只提供浅拷贝
数组增删改查
删除:
如果跟对象一样
let arr = [ ‘ a,b,c ‘]
delate arr[ ‘0’]
arr // [empty,b,c]
数组的长度并没有改变,称为稀疏数组
删除头部
arr.shift() // arr被修改,并返回被删元素
删除尾部
arr.pop() //arr被修改,并返回被删元素
删除中间
arr.splice(index,1) // 删除index的一个元素
arr.splice(index,1,’x’) //并在删除位置他添加x
查看:
查看所有属性名
let arr = [1,2,3,4,5]
arr.x = ‘xxx’
Object.keys(arr) //‘0’,’1’,’2’,’3’,’4’,’x’
for (let key in arr ){
console.log( ${key} : ${arr[key]
} )
}
查看数字(字符串)属性名和值
使用for循环
for ( let i = 0; i < arr.length; i ++){
console.log( ${i} : ${arr[i]}
)
}
使用forEach
arr.forEach( function ( item , index) {
console.log( ${index} : ${item}
)
})
forEach 实现
function forEach( array, fn){
for ( let i = 0; i
}
}
//用for 访问array的每一项
//对每一项调用fn(array[i] , i array)
查看单个属性
和对象一样
arr[下标]
索引越界会为undefined
报错:Cannot read property ‘toString’ of undefined
读取了undefined的toString属性
x.toString() 其中x如果是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,返回新长度
头部加元素
arr.unshift(newItem) 修改arr返回新长度
arr.unshift(item1,item2) 修改arr 返回新长度
在中间添加元素
arr.splice( index, 0, ‘x’) 在index处插入’x’
修改:
反转数组
arr.reverse() 修改原数组
自定义顺序
arr.sort() 从小到大排序
自定义排序
arr.sort(function(a,b){
//返回三个值 1 表示前面那个大
// 0 表示两个一样大
// -1 表示后面那个大
})
数组变换 返回新的数组,不会改变原数组
let arr = [ 1,2,3,4,5]
map n变 n
arr.map(item=> item * item)
//[1,4,9,15,25]
filter n 变少
arr.filter( item=>item %2 === 0)
//[1,2]
reduce n 变1
相加操作
for循环
let sun = 0
for(let i = 0; i< arr.length;i++){
sum += arr[i]
}
console.log(sum)
reduce:
arr.reduce((sun,item)=>{return sum + item},0)