数组是对象;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]
