常用数组方法总结

194 阅读4分钟

arr.push() 

  • 从后面添加元素,返回值为添加完后的数组的长度,直接修原数组

arr.pop() 

  • 从后面删除元素,只能是一个,返回值是删除的元素,直接修改原数组

arr.shift() 

  • 从前面删除元素,只能删除一个 返回值是删除的元素,直接修改原数组

arr.unshift() 

  • 从前面添加元素, 返回值是添加完后的数组的长度,直接修原数组

arr.join()

  • 将arr中每个元素都转为字符串,用自定义的连接符分割,如果 join()里面不加任何参数,用法与toString()一样, 返回字符串

arr.splice(i,n) 

  • 删除从i(索引值)开始之后的那个元素,n是删几个元素, 返回值是删除的元素,直接修原数组

arr.splice(i,n,itemX)

  • splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。
  • 删除从i(索引值)开始之后的那个元素, n是删几个元素, itemX向数组添加的新项目,直接修原数组
  • n 必需,要删除的项目数量。如果设置为 0,则不会删除项目

arr.slice(start,end)

  • 从数组中返回选定的元素,返回一个新数组,包含从start到end(不包含该元素)的数组元素。不会改变原数组
  • start:必须,规定从何处开始选取,如果为负数,规定从数组尾部算起的位置,-1是指最后一个元素
  • end:可选(如果该参数没有指定,那么切分的数组包含从start倒数组结束的所有元素,如果这个参数为负数,那么规定是从数组尾部开始算起的元素)

arr.concat() 

  • 连接两个数组 返回值为连接后的新数组,直接修原数组

arr.sort()

  • 将数组进行排序,返回值是排好的数组,默认是按照最左边的数字进行排序,不是按照数字大小排序的,直接修原数组
// 从小到大
arr.sort((a, b) =>a - b)    // [1, 2, 3, 4, 6, 10, 22]
// 从大到小
arr.sort((a, b) =>b - a)    // [22, 10, 6, 4, 2, 2, 1]

arr.reverse()

  • 将数组反转,返回值是反转后的数组,直接修原数组

arr.slice(start,end) 

  • 切去索引值start索引值end的数组,不包含end索引的值,返回值是切出来的数组,原数组不变
let arr = [1,2,3,4,5]
arr.slice(1, 3)    // 返回[1,4,5] 

arr.forEach(callback) 有点像for的使用方法

  • callback的参数: value --当前索引的值 index --索引 array --原数组
  • 无return,即使有return,也不会返回任何值, 如果用到array这参数会修改到原数组
var arr = [1,2,3,4]; 
var res = arr.forEach((item,index,arr)=>{     
    arr[index] = item * 2; 
    return arr 
})

console.log(arr); // [2,4,6,8]
console.log(res); // undefined

arr.map(callback) 

  • callback的参数: value --当前索引的值 index --索引 array --原数组
  • 遍历数组,有return ,返回一个新数组, 原数组不变
var arr1 = [1,2,3,4]; 
var res1 = arr1.map((item,index,arr)=>{ 
 item = item * 3; 
 return item; 
})

console.log(arr1); // [1,2,3,4]
console.log(res1); // [3,6,9,12]

arr.forEach()和arr.map()的区别

  1. arr.forEach()是和for循环一样,是代替for。arr.map()是修改数组其中的数据,并返回新的数据。
  2. arr.forEach() 没有return  arr.map() 有return

13. arr.filter(callback) 

  • 过滤数组,返回一个满足要求的数组, 原数组不变

arr.every(callback) 

  • 依据判断条件,数组的元素是否全满足,若满足则返回ture
let arr = [1,2,3,4,5];
let q = arr.every(function(v, i) { return v < 30 })

arr.some() 

  • 依据判断条件,数组的元素是否有一个满足,若有一个满足则返回ture

arr.indexOf() 

  • 查找某个元素的索引值,若有重复的,则返回第一个查到的索引值, 若不存在,则返回 -1

arr.lastIndexOf()   

  • indexOf()的功能一样,不同的是从后往前查找

Array.from() 

  • 将伪数组变成数组,就是只要有length的就可以转成数组。 ---es6
let str = '123'
console.log(Array.from(str))    // ["1", "2", "3"]
let obj = {0:'a',1:'b',length:2}
console.log(Array.from(obj))   // ["a", "b"]

Array.of() 

  • 将一组值转换成数组,类似于声明数组    ---es6
let str = '8'
console.log(Array.of(str))   // ['8']
等价于
new Array('8')  //不能是number, 不然是空数组 [empty × 8]  是个空数组

arr.find(callback) 

  • callback的参数: value --当前索引的值 index --索引 array --原数组
  • 找到第一个符合条件的数组成员,返回第一个符合条件的元素, 原数组不变

arr.findIndex(callback) 

  • 找到第一个符合条件的数组成员的索引值,返回该索引值

arr.includes() 

  • 判断数中是否包含给定的值,返回true || false

arr.keys()  ==== 不常用,我是没这样用过

let arr = [1,2,3,4,5];
ler a = arr.keys();  // 打印a = Array Iterator {}, 属于Iterator接口,任何数据结构只要部署Iterator接口,就可以完成遍历操作

ES6创造了一种新的遍历命令for...of循环,Iterator接口主要提供 for...of 消费
for (let key of a) {
    console.log(key);   // 0,1,2,3
}

arr.values() 

  • 遍历数组键值, 和上面arr.keys()用法类似

arr.entries() 

  • 遍历数组的键名和键值 [key: value]
let w = [1,2,3,4]
let ww = w.entries()   // 打印www = Array Iterator {}

for(let l of ww){
    console.log(l)  // [0, 1] [1, 2] [2, 3] [3, 4]
}

arr.reduce(callback, initialValue) 

  • 迭代数组的所有项,累加器,数组中的每个值(从左到右)合并,最终计算为一个值
  • callback: previousValue 必选 :--上一次调用回调返回的值,或者是提供的初始值(initialValue) currentValue 必选 :--数组中当前被处理的数组项 index 可选 :--当前数组项在数组中的索引值 array 可选 :--原数组 initialValue 可选 :--初始值
  • 回调函数第一次执行时,preValue 和 curValue 可以是一个值,如果 initialValue 在调用 reduce() 时被提供,那么第一个 preValue 等于 initialValue ,并且curValue 等于数组中的第一个值;如果initialValue 未被提供,那么preValue 等于数组中的第一个值.
let arr = [0,1,2,3,4]
let arr1 = arr.reduce((preValue, curValue)=> { 
    return preValue + curValue
})
console.log(arr1)    // 10

let arr2 = arr.reduce((preValue,curValue)=> {
    return preValue + curValue
}, 5)
console.log(arr2)    // 15
  • 计算数组中每个元素出现的次数
let names = ['peter', 'tom', 'mary', 'bob', 'tom','peter'];
let nameNum = names.reduce((pre,cur)=>{
  if(cur in pre){
    pre[cur]++
  }else{
    pre[cur] = 1
  }
  return pre
}, {})
console.log(nameNum); //{ peter: 2, tom: 2, mary: 1, bob: 1 }
  • 数组去重
let arr = [1,2,3,4,4,1]
let newArr = arr.reduce((pre,cur)=>{
    if(!pre.includes(cur)){
      return pre.concat(cur)
    }else{
      return pre
    }
}, [])
console.log(newArr);// [1, 2, 3, 4]
  • 使用Math的静态方法max/min,得到数组中最大最小值
function getMax(prev, next) { 
    return Math.max(prev, next) 
} 
arr.reduce(getMax)

arr.reduceRight(callback, initialValue) 

  • 与arr.reduce()功能一样,不同的是,reduceRight()从数组的末尾向前将数组中的数组项做累加

结语

前端react QQ群:788023830 ---- React/Redux - 地下老英雄

前端交流 QQ群:249620372 ---- FRONT-END-JS前端

(我们的宗旨是,为了加班,为了秃顶……,仰望大佬),希望小伙伴们加群一起学习