【JS不完全记录 】- 数组

139 阅读4分钟

最近在经历面试的过程。其中不少有关于JS数组的相关问题,所以在此做一个系统的记录以便日后进行回顾。

关于下面介绍的数组方法,从两个大方向入手:

  • 改变原数组
  • 不改变原数组
    • ES6新增的数组方法

改变原数组的方法

1.push()

  • 末尾添加数据:push(数据)
  • 返回值:数组最终长度
let arr = [1,2,3,4]
let res = arr.push(5); 
console.log(arr); // [1,2,3,4,5]
console.log(res); // 5

2.pop()

  • 末尾删除元素 - pop()
  • 返回值:被删除的值
let arr = [1,2,3,4]
let res = arr.pop(); 
console.log(arr); // [1,2,3]
console.log(res); // 4

3.unshift()

  • 首部添加元素:unshift(数据)
  • 返回值:数组最终长度
let arr = [1,2,3,4]
let res = arr.unshift(5); 
console.log(arr); // [5, 1, 2, 3, 4]
console.log(res); // 5

4.shift()

  • 首部删除元素:shift()
  • 返回值:被删除的元素
let arr = [1,2,3,4]
let res = arr.shift(); 
console.log(arr); // [2, 3, 4]
console.log(res); // 1
  1. reverve()
  • 数组翻转:reverse()
  • 返回值:翻转后的数组
let arr = [1,2,3,4]
let res = arr.reverse(); 
console.log(arr); // [4, 3, 2, 1]
console.log(res); // [4, 3, 2, 1]

6.sort()

  • 数组元素排序
    • sort():按位排序
    • sort((a,b) => return a-b):正序
    • sort((a,b) => return b-a):倒序
  • 返回值:排序后的数组
let arr = [1,2,3,4]

let res = arr.sort(); 
console.log(arr); // [1, 2, 3, 4]
console.log(res); // [1, 2, 3, 4]

let res = arr.sort((a,b) => return a-b); 
console.log(arr); // [1, 2, 3, 4] 
console.log(res); // [1, 2, 3, 4]

let res = arr.sort((a,b) => return a-b); 
console.log(arr); // [4, 3, 2, 1]
console.log(res); // [4, 3, 2, 1]

7.splice()

  • 截取数组
    • splice(开始索引,个数)
    • splice(开始索引,个数,插入的数据)
  • 返回值:被截取后的数组(不符合要求,返回空数组)
let arr = [1,2,3,4]

let res = arr.split(1,2); 
console.log(arr); // [1, 4]
console.log(res); // [2, 3]

let res = arr.split(1,2,88,99,100); 
console.log(arr); // [1, 88, 99, 100, 4]
console.log(res); // [2, 3]

不改变原数组的方法

1.concat()

  • 合并数组:arr.concat(数据)
  • 返回值:一个新数组
let arr = [1,2,3,4]
let res = arr.concat([10,12]);  
// let res = arr.concat(10,12); 
console.log(arr); // [1, 2, 3, 4]
console.log(res); // [1, 2, 3, 4, 10, 12]

2.join()

  • 数组转字符串:arr.join('连接符')
  • 返回值:最终的一个字符串
let arr = [1,2,3,4]
let res = arr.join('-');  
console.log(arr); // [1, 2, 3, 4]
console.log(res); // 1-2-3-4

3.slice()

  • 截取数组:arr.slice(开始索引,结束索引)
    • 前(开始索引)包,后(结束索引)不包
  • 返回值:截取的数组组成的一个新数组
let arr = [1,2,3,4]
let res = arr.slice(1,3);  
console.log(arr); // [1, 2, 3, 4]
console.log(res); // [2, 3]

4.indexOf()

  • 数组元素检查(从左往右):
    • arr.indexOf(被查询的数据)
    • arr.indexOf(被查询的数据,开始索引)
  • 返回值
    • 存在,返回数据第一次出现的索引值
    • 不存在,返回 -1
let arr = [1,2,3,4]
let res = arr.indexOf(1);  
console.log(arr); // [1, 2, 3, 4]
console.log(res); // 0

5.lastIndexOf()

  • 从右向左检查数组元素

ES6新增的数组方法

1.forEach()

  • 循环遍历,代替了for:arr.forEach((item, index, arr) => {})
  • 返回值:undefined
    • item:数组每一项
    • index:每一项对应的索引
    • arr:原数组
let arr = [1,2,3,4]
let res = arr.forEach(item => {
    console.log(item)
})
console.log(arr); // [1, 2, 3, 4]
console.log(res); // undefined

2.map()

  • 数组映射:arr.map((item,index,arr) => {})
  • 返回值:一个与原数组长度一样的,被映射成功的新数组
let arr = [1,2,3,4]
let res = arr.map(item => {
    return item + 1
})
console.log(arr); // [1, 2, 3, 4]
console.log(res); // [2, 3, 4, 5]

这里会存在一个高频面试题

问题:map与forEach的区别是什么?

回答:看到上面的实例代码,很容易可以看出两者的区别就是,map会返回一个新的、并长度与原数组相同的数组,而forEach不会

3.filter()

  • 数组过滤:arr.filter((item,index,arr) => {})
  • 返回值:过滤后满足条件的数据数组,没有则是一个空数组
let arr = [1,2,3,4]
let res = arr.filter(item => {
    return item > 1
})
console.log(arr); // [1, 2, 3, 4]
console.log(res); // [2, 3, 4]

4.every()

  • 判断所有数组元素是否满足条件:arr.every((item,index,arr) => {})
  • 返回值:布尔值
    • 所有数组元素满足条件 => true
    • 其中一个不满足条件 => false
let arr = [1,2,3,4]
let res = arr.every(item => {
    return item > 1
})
console.log(arr); // [1, 2, 3, 4]
console.log(res); // false

5.some()

  • 判断数组中是否有满足条件的元素:arr.some((item,index,arr) => {})
  • 返回值:布尔值
    • 存在满足条件的元素 => true
    • 不存在满足条件的元素 => false

6.find()

  • 获取数组中满足条件的第一个数据:arr.find((item,index,arr) => {})
  • 返回值:存在满足条件的数据,返回;否则返回undefined
let arr = [1,2,3,4]
let res = arr.find(item => {
    return item > 2
})
console.log(arr); // [1, 2, 3, 4]
console.log(res); // 3

7.reduce()

  • 数组元素累加:arr.reduce((prev,item,index,arr)=>{},init)
  • 返回值:累加后的结果
let arr = [1,2,3,4]
let res = arr.reduce((prev, item) => {
    return prev + item 
})
console.log(arr); // [1, 2, 3, 4]
console.log(res); // 10