数组是对象;JS里没有真正的数组,实际上使用key 和 value 模拟的,key依旧是字符串
伪数组:原型链中没有数组的共有属性
数组元素的增删改查
Array.concat()
Array.slice()
用作数组切割,前闭后开,返回一个对原数组内容进行过浅拷贝新数组,不修改原数组
Array.shift()
Array.unshift()
Array.pop()
Array.push()
Array.splice(x,y,z)
修改原数组
x 是索引(开始起点)
y 是删除元素的数量
z 是在x位置添加一个或多个元素
并以数组形式返回被修改的内容
Array.indexOf(x,y)
x 是元素 ,y 是索引,即查找时从y处开始,包括y
判断元素x是否在一个数组里
有;返回第一次查到该元素时的索引
没有;返回-1
Array.find()
返回数组中满足提供的测试函数的第一个元素的值。否则返回undefined
arr.find(x => x > 7)
8//这是值
arr.find(x => x < 0)
undefined
Array.findIndex()
方法返回数组中满足提供的测试函数的第一个元素的索引。否则返回-1。
arr.findIndex(x => x >7)
7//这是索引
arr.indexOf(x => x < 0)
-1
Array.sort()
按数字从小到大排序
let arr = [22,5,35,6,7,98,53,41,19,64]
arr.sort(function(a,b){
if( a > b ){
return 1
}else if (a < b ) {
return -1
}else{ return 0}
})
简略写法
let arr = [22,5,35,6,7,98,53,41,19,64]
arr.sort((a,b) => a > b? 1:-1)
更简略写法
let arr = [22,5,35,6,7,98,53,41,19,64]
arr.sort((a,b) => a-b)
按数字从大到小排序
let arr = [22,5,35,6,7,98,53,41,19,64]
arr.sort(function(a,b){
if( a > b ){
return -1
}else if (a < b ) {
return 1
}else{ return 0}
})
简略写法
let arr = [22,5,35,6,7,98,53,41,19,64]
arr.sort((a,b) => a > b? -1:1)
更简略写法
let arr = [22,5,35,6,7,98,53,41,19,64]
arr.sort((a,b) => b-a)
forEach()
forEach的实现原理
let arr = [1,2,3,4,5,6,7,8,9]
function forEach(Array,fn){
for(let i =0; i < Array.length; i++){
fn(Array[i], i)
}
}
forEach(arr,function(x,y){ console.log(`${y}:${x}`)})
forEach()和 for 有什么区别:
- for 是关键字
- forEach()是函数,是靠for关键字实现的
- for关键字可以用break和continue,而forEach不可以
Array.map()
let arr =[1,2,3,4,5,6,7,8,9]
arr.map(item => item *item)
let arr =[22,5,35,6,7,98,53,41,19,64]
arr.map(item => {return item-1})
let arr1 = [0,1,2,2,3,3,3,4,4,4,4,6]
let arr2 = arr1.map(item => {return {0:'周日',1:'周一',2:'周二',3:'周三',4:'周四',5:'周五',6:'周六'}[item]})
console.log(arr2)
Array.filter()
let arr =[22,5,35,6,7,98,53,41,19,64]
arr.filter(item=>{return item > 50 })//选取大于50的数
Array.reduce()
可以取代 Array.filter() 和 Array.map()数组求和
let arr = [1,2,3,4,5,6,7,8,9]
arr.reduce((sum,item)=>sum+item,0)
45
数组筛选
let arr = [1,2,3,4,5,6,7,8,9]
arr.reduce((result,item) => result.concat(item%2===0),[])
(9) [false, true, false, true, false, true, false, true, false]
//用reduce筛选一定要用 ? : 语句
let arr = [1,2,3,4,5,6,7,8,9]
arr.reduce((result,item) => result.concat(item%2===0? item:[]),[])
(4) [2, 4, 6, 8]
数组筛选求和
let arr = [1,2,3,4,5,6,7,8,9]
arr.reduce((sum,item)=>item%2===0?sum+item*item:sum,0)
120
数组各项平方
let arr = [1,2,3,4,5,6,7,8,9]
arr.reduce((result,item)=>result.concat(item*item),[])
(9) [1, 4, 9, 16, 25, 36, 49, 64, 81]
数组筛选后各项平方
let arr = [1,2,3,4,5,6,7,8,9]
arr.reduce((result,item)=>item%2===0?result.concat(item*item):result,[])
(4) [4, 16, 36, 64]