【ES6入门】
reduce
回调函数参数四个:pre: 初始值(之后为上一操作的结果);cur: 当前元素之;index: 当前索引;arr: 数组本身
主要有以下几种用法:
// reduce 数组去重,也可使用Set实现
// 1)reduce 方式
let arr = [1, 2, 1, 2, 3, 5, 4, 5, 3, 4, 4, 4, 4]
let result = arr.sort().reduce((init, current) => {
if (init.length === 0 || init[init.length - 1] !== current) {
init.push(current)
}
return init
}, [])
// 2)Set
const dedupe = (array) => {
return Array.from(new Set(array));
}
console.log(Array.from(new Set([1,2,3,4,5,2,4,1])))
console.log(...new Set([1,2,3,4,5,2,4,1]))
// 数组求和
var total = [ 0, 1, 2, 3 ].reduce(( acc, cur ) => {
return acc + cur
}, 0)
// 二维数组转为一维数组
[[1, 2], [3, 4], [5, 6]].reduce(( acc, cur ) => [...acc, ...cur], []) // [1, 2, 3, 4, 5, 6]
[[1, 2], [3, 4], [5, 6]].reduce(( acc, cur ) => {
return acc.concat(cur)
}, []) // [ 0, 1, 3, 4, 5, 6 ]
// 计算数组中每个元素出现的次数
const arraySum = (arr, val) => arr.reduce((acc, cur) => {return cur == val ? acc + 1 : acc + 0}, 0)
let arr = [1, 2, 3, 4, 5]
arraySum(arr, 0) // 3
// 代替filter和map的组合
const characters = [
{ name: 'ironman', env: 'marvel' },
{ name: 'black_widow', env: 'marvel' },
{ name: 'wonder_woman', env: 'dc_comics' },
]
// filter 和 map 的组合
characters
.filter(character => character.env === 'marvel')
.map(character => {
return Object.assign(
{},
character,
{ alsoSeenIn: ['Avengers'] }
)
})
// reduce 方式
characters.reduce((acc, character) => {
return character.env === 'marvel' ?
acc.concat(
Object.assign(
{},
character,
{ alsoSeenIn: ['Avengers'] }
)
) : acc
}, [])
forEach
回调函数参数,item(数组元素)、index(序列)、arr(数组本身)
循环数组,无返回值,不改变原数组
不支持return操作输出,return只用于控制循环是否跳出当前循环
includes
判断数组是否包含某个元素,不用return,不用回调函数,返回布尔值
filter
使用return操作输出,会循环数组每一项,并在回调函数中操作
返回满足条件的元素组成的数组,不改变原数组
map
输出的是return什么就输出什么新数组
原数组被“映射”成对应新数组,返回新数组,不改变原数组
find
数组实例的find
方法,用于找出第一个符合条件的数组成员。它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true
的成员,然后返回该成员。如果没有符合条件的成员,则返回undefined
。
[1, 4, -5, 10].find((n) => n < 0) // -5
some
返回布尔值,遇到满足条件变跳出循环
every
返回布尔值,遇到不满足条件跳出循环
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。