JS,reduce方法中第一个参数回调函数的return的值具体代表什么?

发布于 2022-09-13 01:01:31 字数 499 浏览 8 评论 0

看到一个 reduce 的高级用法

function Reverse(arr = []) {
    return arr.reduceRight((accumulator, currentValue) => (t.push(currentValue), accumulator), [])
}

Reverse([1, 2, 3, 4, 5]) // [5, 4, 3, 2, 1]

就是用 reduce 来实现 reverse 方法

已知 accumulator : 累计器累计回调的返回值; 它是上一次调用回调时返回的累积值 这段话是MDN中所描述的

但是这里箭头函数return的 (t.push(v), t) ,我始终没看明白是个什么意思?

为什么不是直接 return t.push(v) 呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

二智少女猫性小仙女 2022-09-20 01:01:31

t.push(i) 返回值是 i
(t.push(i), t) 返回值是 t

秋叶绚丽 2022-09-20 01:01:31

知识点1:箭头函数直接表达返回值, a => !a,箭头后面直接提供一个表达式当做箭头函数的返回值

知识点2:逗号运算符,(1,2,3)该表达式的求值为最后一个逗号后面的表达式求值,即 a = (1,2)结果a的值为2。

知识点3:reduceRight,反向缩合,从最后一个元素调用缩合函数,缩合函数的第一个参数是暂时的撮合结果,第二个值是遍历元素。

你的源码应该是

function Reverse(arr = []) {
    return arr.reduceRight((accumulator, currentValue) => (accumulator.push(currentValue), accumulator), [])
}

缩合结果是一个数组,缩合函数相当于

const func = (accumulator, currentValue) => {
    accumulator.push(currentValue);
    return accumulator;
}

反向缩合动作记录元素不就相当于获取原数组的反序列。注意,原始数组并没有翻转,reverse方法会修改原数组。在注意:一般来说手动写代码不推荐使用逗号运算符,可读性不高而且容易犯错。编译后代码无视

孤单情人 2022-09-20 01:01:31

你好,首先t没有定义,我觉得你应该想表达的是

function Reverse(arr = []) {
    return arr.reduceRight((accumulator, currentValue) => (accumulator.push(currentValue), accumulator), [])
}

然后

  1. ()=>(,,,,...) 这个函数执行后,会执行前面的语句,返回最后一个语句的返回值
  2. 为什么不是直接 return t.push(v) 呢?
    t.push(v) 假定这里t是数组 数组 push 方法返回 push后数组的长度,return 回去显然不满足需求
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文