数组是对象;JS里没有真正的数组,实际上使用key 和 value 模拟的,key依旧是字符串
伪数组:原型链中没有数组的共有属性

数组元素的增删改查

Array.concat()

用作数组合并,并返回一个新的数组

Array.slice()

用作数组切割,前闭后开,返回一个对原数组内容进行过浅拷贝新数组,不修改原数组

Array.shift()

顶出最开始的元素,并返回该元素

Array.unshift()

在最开始位置挤进一个或多个元素,并返回length

Array.pop()

弹出最末端的元素,并返回该元素

Array.push()

在最末端加入一个或多个元素,并返回length

Array.splice(x,y,z)

修改原数组
x 是索引(开始起点)
y 是删除元素的数量
z 是在x位置添加一个或多个元素
并以数组形式返回被修改的内容

Array.indexOf(x,y)

x 是元素 ,y 是索引,即查找时从y处开始,包括y
判断元素x是否在一个数组里
有;返回第一次查到该元素时的索引
没有;返回-1

Array.find()

返回数组中满足提供的测试函数的第一个元素的值。否则返回undefined

  1. arr.find(x => x > 7)
  2. 8//这是值
  3. arr.find(x => x < 0)
  4. undefined

Array.findIndex()

方法返回数组中满足提供的测试函数的第一个元素的索引。否则返回-1。

  1. arr.findIndex(x => x >7)
  2. 7//这是索引
  3. arr.indexOf(x => x < 0)
  4. -1

Array.sort()

按数字从小到大排序

  1. let arr = [22,5,35,6,7,98,53,41,19,64]
  2. arr.sort(function(a,b){
  3. if( a > b ){
  4. return 1
  5. }else if (a < b ) {
  6. return -1
  7. }else{ return 0}
  8. })

简略写法

  1. let arr = [22,5,35,6,7,98,53,41,19,64]
  2. arr.sort((a,b) => a > b? 1:-1)

更简略写法

  1. let arr = [22,5,35,6,7,98,53,41,19,64]
  2. arr.sort((a,b) => a-b)

按数字从大到小排序

  1. let arr = [22,5,35,6,7,98,53,41,19,64]
  2. arr.sort(function(a,b){
  3. if( a > b ){
  4. return -1
  5. }else if (a < b ) {
  6. return 1
  7. }else{ return 0}
  8. })

简略写法

  1. let arr = [22,5,35,6,7,98,53,41,19,64]
  2. arr.sort((a,b) => a > b? -1:1)

更简略写法

  1. let arr = [22,5,35,6,7,98,53,41,19,64]
  2. arr.sort((a,b) => b-a)

forEach()

forEach的实现原理

  1. let arr = [1,2,3,4,5,6,7,8,9]
  2. function forEach(Array,fn){
  3. for(let i =0; i < Array.length; i++){
  4. fn(Array[i], i)
  5. }
  6. }
  7. forEach(arr,function(x,y){ console.log(`${y}:${x}`)})

forEach()和 for 有什么区别:

  1. for 是关键字
  2. forEach()是函数,是靠for关键字实现的
  3. for关键字可以用break和continue,而forEach不可以

    Array.map()

    1. let arr =[1,2,3,4,5,6,7,8,9]
    2. arr.map(item => item *item)
    1. let arr =[22,5,35,6,7,98,53,41,19,64]
    2. arr.map(item => {return item-1})
    image.png
    1. let arr1 = [0,1,2,2,3,3,3,4,4,4,4,6]
    2. let arr2 = arr1.map(item => {return {0:'周日',1:'周一',2:'周二',3:'周三',4:'周四',5:'周五',6:'周六'}[item]})
    3. console.log(arr2)

    Array.filter()

    1. let arr =[22,5,35,6,7,98,53,41,19,64]
    2. arr.filter(item=>{return item > 50 })//选取大于50的数
    image.png

    Array.reduce()

    可以取代 Array.filter() 和 Array.map()

    数组求和

    1. let arr = [1,2,3,4,5,6,7,8,9]
    2. arr.reduce((sum,item)=>sum+item,0)
    3. 45

    数组筛选

    1. let arr = [1,2,3,4,5,6,7,8,9]
    2. arr.reduce((result,item) => result.concat(item%2===0),[])
    3. (9) [false, true, false, true, false, true, false, true, false]
    4. //用reduce筛选一定要用 ? : 语句
    5. let arr = [1,2,3,4,5,6,7,8,9]
    6. arr.reduce((result,item) => result.concat(item%2===0? item:[]),[])
    7. (4) [2, 4, 6, 8]

    数组筛选求和

    1. let arr = [1,2,3,4,5,6,7,8,9]
    2. arr.reduce((sum,item)=>item%2===0?sum+item*item:sum,0)
    3. 120

    数组各项平方

    1. let arr = [1,2,3,4,5,6,7,8,9]
    2. arr.reduce((result,item)=>result.concat(item*item),[])
    3. (9) [1, 4, 9, 16, 25, 36, 49, 64, 81]

    数组筛选后各项平方

    1. let arr = [1,2,3,4,5,6,7,8,9]
    2. arr.reduce((result,item)=>item%2===0?result.concat(item*item):result,[])
    3. (4) [4, 16, 36, 64]