【问题标题】:short circuit Array.reduce in Javascript [duplicate]Javascript中的短路Array.reduce [重复]
【发布时间】:2017-11-06 17:08:27
【问题描述】:

我试图优雅地解决一个模式的玩具示例。在下面的算法中,当我找到一个值为 0 的元素而不访问其余元素时,我想立即从 reduce 中返回 0。

let factors = [2,3,6,0,9,4,4,4];
function product(arr) {
    return arr.reduce((acc, elem) => (acc * elem), 1);
}

有什么方法可以摆脱reduce迭代吗?

【问题讨论】:

  • 如果您有特定要求,请编写您的自定义 reduce 函数。
  • reduce 函数一般会遍历整个数组。
  • 使用break结束reduce
  • 为什么不只是return ~arr.indexOf(0) ? 0 : arr.reduce(/* ... */);
  • @scniro,谢谢,抱歉,我没看到这个问题。

标签: javascript functional-programming short-circuiting


【解决方案1】:

你可以通过改变原始数组来短路reduce。

let factors = [2, 3, 6, 0, 9, 4, 4, 4];

function product(arr) {
  return arr.reduce((acc, elem, i, array) => (array[i] === 0 ? (arr.length = i, elem) : (acc * elem)), 1);

}
console.log(product(factors))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 2020-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多