标签:png ima 总结 class 前缀和 index pre 调用 alt
let xxx = arr.reduce( function (pv, cv, ci ,arr) { return }[, init_val] )
对arr的每个元素,执行匿名函数fun,并将返回值作为下一次调用fun的pv。
pv:pre value,上一次执行后返回的值。
cv:current value,当前操作对应的索引对应的值。
ci:current index,当前操作对应的索引。
arr:执行当前操作的数组。
当没有init_val的时候,跳过arr[0],默认从index=1开始执行,arr[0]直接充当pv。
当有init_val的时候,从index=0开始执行,init_val充当pv。
let arr = [1,2,3,4] let = sum = arr.reduce(function (pr, cv, ci, arr) { console.log(pr, cv, ci); return pr + cv; }) console.log(sum);
直接从2开始的,1直接作pr
let arr = [1,2,3,4] let = sum = arr.reduce(function (pr, cv, ci, arr) { console.log(pr, cv, ci); return pr + cv; }, 0) console.log(sum);
从1开始,0作pr,符合前缀和的逻辑
let arr = [1,2,3,4] let = sum = arr.reduce(function (pr, cv, ci, arr) { console.log(pr, cv, ci); return pr + cv; }, 5) console.log(sum);
从1开始,相当于初值为5的前缀和
不知道有什么用,反正没有原生的快就完事了。
看完reduce就不得不顺便看一下forEach了
arr.forEach( function (cv, ci, arr) { }[, thisvalue] )
这个thisvalue参数,我至今不知道可以怎么用。
各个参数含义和reduce一样,其中cv是必须的。
其实就是循环。
那也就比逊顺便说一下map了
let new_arr = arr.map(function (cv, ci, arr) { return ; })
返回值是一个新数组,新数组中的每个值等于对应旧数组当时在匿名函数里的返回值
例如,返回一个数组,是每个值的平方
let new_arr = arr.map(function (cv, ci, arr) { return cv * cv; }) console.log(new_arr);
总结一下:
reduce 和 map都需要返回值,reduce返回的是一个值,而其每次的返回值,作为下一次运算的参数pv。
而map返回的是一个数组,新数组的每个值等于匿名函数的return值。
forEach的匿名函数不需要返回值,就是一个简单的循环,不产生新的东西。
但是不能这么写
let arr = [1,2,3,4] arr.forEach(function (cv, ci, arr) { cv = cv * cv; }) console.log(arr);
这个cv只是一个形参,arr的值不会变的。
必须写成
arr[ci] = cv * cv;
标签:png ima 总结 class 前缀和 index pre 调用 alt
原文地址:https://www.cnblogs.com/liwenchi/p/10661909.html