数组方法理解
迭代方法
-
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。
-
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就是直接进行迭代。
-
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
-
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