JavaScript | 最全详解数组方法(一)

259 阅读6分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第23天,点击查看活动详情

一、前言

数组方法有很多,在开发中我们通常都是根据场景去用不同的数组方法,有的方法可能长期不用了,就比较容易忘记,我就整理和归纳一下我们数组方法到底有哪些,方便平时忘记了来看看。

二、改变原数组的方法

1. arr.splice()

删除元素并且向数组添加新元素 array.splice(index,howmany,item1,.....,itemX)

  • index:必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置
  • howmany:必需。要删除的项目数量。如果设置为 0,则不会删除项目。
  • item1, ..., itemX: 可选。向数组添加的新项目。
  • 注:数组返回的是被删除的数组
   let arr = [1,2,3,4,5]
   console.log(arr.splice(1,2)) //[2,3]
   console.log(arr) //[1,4,5]

2. arr.sort()

排序数组

  • 没有参数:则按照元素的字母升序,如果不是元素不是字符串的话,会调用toString()方法将元素转化为字符串的Unicode(万国码)位点,然后再比较字符。
  • 排序规则函数:排序规则函数接受两个参数:a , b,返回一个正数或负数。升序不变返回负,降序改变返回正
  • 注:数组返回的是被改变后的数组
   let arr = [1,2,3,4,5]
   arr.sort((a,b)=>{
      return a-b; // 升序不变返回负,不变指参数位置不变
    })
   console.log(arr) //[1,2,3,4,5]
   arr.sort((a,b)=>{
      return b-a;// 降序改变返回正
    })
    console.log(arr) //[5,4,3,2,1]

3. arr.pop()

删除数组最后的一个元素并且返回

    let arr = [1,2,3,4,5]
    console.log(arr.pop()) //5
    console.log(arr) //[1,2,3,4]

4. arr.push()

数组的末尾添加元素并返回新长度push(item1, item2...)

    let arr = [1,2,3,4,5]
    console.log(arr.push(6,7)) //7
    console.log(arr) //[1, 2, 3, 4, 5, 6, 7]

5. arr.shift()

删除数组第一个元素并返回

    let arr = [1,2,3,4,5]
    console.log(arr.shift()) //1
    console.log(arr) //[2, 3, 4, 5]

6. arr.unshift()

数组头部添加元素并返回新长度unshift(item1, item2...)

    let arr = [1,2,3,4,5]
    console.log(arr.unshift(-1,0)) //7
    console.log(arr) //[-1, 0, 1, 2, 3, 4, 5]

7. arr.reverse()

颠倒数组中元素的顺序

    let arr = [1,2,3,4,5]
    console.log(arr.reverse()) //[5, 4, 3, 2, 1]
    console.log(arr) //[5, 4, 3, 2, 1]

8. arr.fill()

用指定元素填充数组fill(item, start, end)

  • item(必需): 要填充数组的值
  • start(可选): 填充的开始位置,默认值为0
  • end(可选):填充的结束位置,默认是为this.length
    let arr = ['a','b','c']
    let re = arr.fill(6,0,3)
    console.log(re) //[6, 6, 6]
    console.log(arr) //[6, 6, 6]

9. arr.copyWithin

指定位置的成员复制到其他位置并返回替换后的新数组copyWithin(target, start, end)

  • target(必需):从该位置开始替换数据。如果为负值,表示倒数。
  • start(可选):从该位置开始读取数据,用哪些数据来替换,默认为 0。如果为负值,表示倒数。
  • end(可选):到该位置前停止读取数据,默认等于数组长度。使用负数可从数组结尾处规定位置。
    let arr = [1,2,3,4,5]
    //意思是从下标1开始被替换,下标2开始-下标4之前
    let arr1 = arr.copyWithin(1,2,4) 
    console.log(arr1) //[1,3,4,4,5]
    //下标0被替换 -2表示从4开始 -1表示最后
    console.log(arr.copyWithin(0, -2, -1)) //[4,2,3,4,5]

总结

  • 替换前后数组的长度保持不变
  • 读取数据在终止位置的前一个位置停止,并且保存这个位置的数据不动
  • 读取出来了多少数据,就需要在前面按顺序替换掉多少数据

三、不改变原数组

1. arr.slice()

截取数组片段,返回新数组slice(start, end)

  • start:(可选)规定从何处开始选取,负数表示从数组尾部算起
  • end: (可选)没指定则一直截取到数组最后一个元素,包括最后一个。指定了则截取到指定位置前一个元素。
    let arr = [1,2,3,4,5]
    console.log(arr.slice(1,2)) //[2]
    console.log(arr)//[1, 2, 3, 4, 5]

2. arr.join()

按照连接符将数组连接成字符串并返回字符串join(str)

  • 没有参数: 则使用 , 连接
  • 有参数: 按照参数指定连接符连接
    let arr = ['luck','xl']
    console.log(arr.join()) //luck,xl
    console.log(arr.join('+')) //luck+xl

3. arr.concat

合并多个数组并返回concat(item1,item2...)

  • 参数可以是数组对象:等待合并的数组
  • 参数也可以是具体的值(元素): 等待合并的元素
     let a = [5,2,0]
     let b = [1,3,1,4]
     let re1 = a.concat(b)
     console.log(re1) //[5, 2, 0, 1, 3, 1, 4]
     let re2 = a.concat([1,3,1,4])
     console.log(re2) //[5, 2, 0, 1, 3, 1, 4]

4. toLocaleString()

数组转字符串

  • 是将数组中每一个元素调用自身的toLocaleString() 方法后用 , 连接得到的字符串
  • 可以理解为先把数组中每个元素都调用下 toLocaleString() 方法,再把得到的结果数组调用 join() 方法
    let arr=[{name:'pubdreamcc'},24,'cc',new Date()]
    console.log(arr.toLocaleString()) //[object Object],24,cc,2022/6/23 18:00:00

5. toString()

数组转字符串

  • 它是定义在 Object 原型上面的一个方法,用来把一个对象转成字符串,在这里其实同 join(无参数) 方法效果一样
  let arr = [1,2,3,4,5]
  console.log(arr.toString()) //1,2,3,4,5
    

6. arr.indexOf()

查找数组某个元素并返回其第一次出现位置下标indexOf(item, start)

  • item(必需): 需要查找的元素值
  • start(可选): 规定在数组中开始检索的位置(0-array.length)
  • 如果没找到,返回 -1 注意: indexOf()不能识别NaN, 因为 NaN 与任何数不相等,包括自身
    let arr = [1,2,3,4,5]
    console.log(arr.indexOf()) //-1
    console.log(arr.indexOf(1)) //0
    console.log(arr.indexOf('1')) //-1

7. arr.lastIndexOf()

查找数组某个元素并返回其最后一次出现位置下标lastIndexOf(item, fromIndex)

  • 该方法与 indexOf() 恰好相反,查找不到同样返回 -1
  • item(必需): 被查找的元素
  • fromIndex(可选): 逆向查找开始位置,默认值数组的长度-1,即查找整个数组。
    let arr= ['a','b','c',1,2,3,'a','b','c',4,5] //数组长度为10
    console.log(arr.lastIndexOf('c',4)) //从下标4开始往前找 返回下标2
    console.log(arr.lastIndexOf('c')) //默认不选,即查找整个数组 返回8
    console.log(arr.lastIndexOf('c',-11)) //-1 数组不会被查找

8. arr.includes()

查找数组是否包含某个元素返回布尔值includes(item, fromIndex)

  • item (必需):要查找的元素
  • fromIndex (可选): 默认值为0,参数表示搜索的起始位置,接受负值。正值超过数组长度,数组不会被搜索,返回false。负值绝对值超过长数组度,重置从0开始搜索。
    let arr = ['a','b','c',NaN]
    console.log(arr.includes(NaN)) //true 能识别NaN
    console.log(arr.includes('c',100)) //false 超过数组长度 不搜索
    console.log(arr.includes('a',-4)) //true 从倒数第四个元素开始搜索
    console.log(arr.includes('a',-100)) //true 负值数值超过数组,搜索整个数组

好了,以上就是本篇文章的分享,感谢阅读!