为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Array.prototype.reduce() 中预定义累加器?

如何在 Array.prototype.reduce() 中预定义累加器?

犯罪嫌疑人X 2021-08-20 17:35:29
我需要从数组中的特定索引相互添加项目。function findEvenIndex(arr) {  let leftsum = 0;  let rightsum = 0;  arr.forEach((el, ind) => {    arr.reduce((acc, currv, i) => i > ind + 1 ? acc + currv : 0) //acc = 1 or undefined    leftsum += arr[ind + 1];    rightsum += arr[ind - 1]  })}我希望累加器等于 ind+1。我该怎么做?
查看完整描述

1 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

如何在 Array.prototype.reduce() 中预定义累加器?


只需将第二个参数提供给reduce:


arr.reduce ((acc, currv, i) => i > ind+1 ? acc+currv : 0, ind + 1)

// -------------------------------------------------------^^^^^^^

但是reduce如果您不使用返回值,则使用没有意义。这个reduce电话实际上是一个空操作。您没有使用结果,并且回调中没有副作用。


我问这个函数是做什么的,你在评论中回答:


我需要取一个数组并找到一个索引 N,其中 N 左边的整数之和等于 N 右边的整数之和。


要做到这一点,我会从尽可能靠近中间的地方开始,然后慢慢地走到边缘。显然您不希望我发布解决方案,但我会选择中点索引,从该索引计算每个方向的总和,然后只要总和不匹配,请尝试向左移动一个位置(减去从左边的总和到新索引处的值并将其添加到右边)并检查。然后尝试向右移动一个位置(从右边的总和中减去新索引处的值并将其添加到左边)并检查。继续前进,直到遇到边缘。


查看完整回答
反对 回复 2021-08-20
  • 1 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信