js数组方法整理

138 阅读2分钟

数组方法理解

迭代方法

  1. map

var numbers = [1,2,3,4,5,6,7]
var mapResult = numbers.map((item,index,array)=>{
    return item*2
})
console.log(numbers) // [1, 2, 3, 4,5, 6, 7]
console.log(mapResult) //[2, 4, 6, 8, 10, 12, 14] 

map函数分别有3个参数,item、index和array。

item是当前项、index是当前项的下标(从0开始)以及array是指原数组。

原数组map会返回一个新的数组。

这里需要注意的是 map并不改变原数组的内容,可以称为 immutable。

  1. forEach

   var forEachNumbers = [1,2,3,4,5,6,7]
   forEachNumbers.forEach((item,index,array)=>{
       return item*2
   })
   console.log(forEachNumbers)

这里我们可以看到 forEach也不会改变原数组,即immutable.

  var forEachNumbers = [1,2,3,4,5,6,7]
  forEachNumbers.forEach((item,index,array)=>{
      return item*2
  })
  console.log(forEachNumbers)
forEach map
相同点 三个参数意义相同,并且都是immutable,不会对数组的内容进行改变
不同点 forEach没有返回值,所以无论是否是空数组都是undefined 有返回值,但是不会对数组进行判空

对于数组判空,我们可以这样理解,forEach因为是无返回值,所以无论如何都是undefined,所以map就是直接进行迭代。

  1. every 和 some

我们直接看代码

var numbers = [1,2,3,4,5,6,7]
var everyResult = numbers.every((item,index,array)=>{
    return item > 2
})
console.log(everyResult)//false 
var numbers = [1,2,3,4,5,6,7]
var someResult = numbers.some((item,index,array)=>{
    return item > 2
})
console.log(someResult)//true

从字面意思上我们可以清晰明了的知道every 和 some 分别代表着每个和部分,就像我们的示例代码。

  • every,对数组中的每一项都进行判断,如果每一项都是true则返回true!否则是false
  • some,对数组中每一项都进行判断,如果某一项的结果是true,则整体的结果为 true,全部是false,结果才是false
  1. filter

filter顾名思义,是筛选的意思。

var numbers = [1, 2, 3, 4, 5, 6, 7]
var filterArray = numbers.filter((item, index, array) => {
    return item % 2 == 1
})
console.log(filterArray)//[ 1, 3, 5, 7 ]
console.log(numbers)//[1, 2, 3, 4, 5, 6, 7]

它会返回筛选之后的结果。这里我们就以奇树为例,看到返回的结果就是 1,3,5,7