gpt4 book ai didi

javascript - 如何提前中断 reduce() 方法?

转载 作者:IT王子 更新时间:2023-10-29 02:55:13 35 4
gpt4 key购买 nike

如何中断 reduce() 方法的迭代?

:

for (var i = Things.length - 1; i >= 0; i--) {
if(Things[i] <= 0){
break;
}
};

reduce()

Things.reduce(function(memo, current){
if(current <= 0){
//break ???
//return; <-- this will return undefined to memo, which is not what I want
}
}, 0)

最佳答案

更新

一些评论员提出了一个很好的观点,即原始数组正在发生变化,以便在 .reduce() 逻辑中尽早中断。

因此,我通过在调用后续 .reduce() 之前添加 .slice(0)稍微修改了答案> 步骤,生成原始数组的副本。注意:完成相同任务的类似操作是slice()(不太明确)和展开运算符[...array](slightly less performant ).请记住,所有这些都为总运行时间 + 1*(O(1)) 添加了一个额外的线性时间常数因子。

副本用于保护原始数组免受导致从迭代中弹出的最终突变的影响。

const array = ['apple', '-pen', '-pineapple', '-pen'];
const x = array
.slice(0) // create copy of "array" for iterating
.reduce((acc, curr, i, arr) => {
if (i === 2) arr.splice(1); // eject early by mutating iterated copy
return (acc += curr);
}, '');

console.log("x: ", x, "\noriginal Arr: ", array);
// x: apple-pen-pineapple
// original Arr: ['apple', '-pen', '-pineapple', '-pen']


您可以通过改变 reduce 函数的第 4 个参数:“array”来中断 .reduce() 调用的任何迭代。不需要自定义 reduce 函数。请参阅 Docs 以获取完整的 .reduce() 参数列表。

Array.prototype.reduce((acc, curr, i, array))

第 4 个参数是被迭代的数组

const array = ['apple', '-pen', '-pineapple', '-pen'];
const x = array
.reduce((acc, curr, i, arr) => {
if(i === 2) arr.splice(1); // eject early
return acc += curr;
}, '');
console.log('x: ', x); // x: apple-pen-pineapple

为什么?

我能想到使用它而不是其他许多解决方案的唯一原因是,如果您想为您的算法维护一种函数式编程方法,并且您希望尽可能使用最具声明性的方法来实现这一点。如果您的整个目标是将数组从字面上减少为替代的非假基元(字符串、数字、 bool 值、符号),那么我认为这实际上是最好的方法。

为什么不呢?

对于不改变函数参数,有一个完整的参数列表,因为这是一种不好的做法。

关于javascript - 如何提前中断 reduce() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36144406/

35 4 0
文章推荐: javascript - 如何使用 Javascript 列出当前页面的所有 cookie?
文章推荐: html - 在 Ruby(或 Shell)中漂亮地打印 HTML
文章推荐: sql-server - SQL Server 中的 XQuery 与 OpenXML
文章推荐: javascript - 如何使 HTML
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com