javascript - 使用 .reduce 查找序列中缺失的数字

标签 javascript

var o = [1,2,3,5,6,7,8]

var res = o.reduce(function(x,y){

   return !((y-x)===1)?y-1:'Nothing'

})
console.log(res)//7

输出应该是 4,想知道是否可以使用 reduce 或功能性(不是通过循环)?它仅在缺失值在数组的最后一个值之前有效。

最佳答案

您可以使用reduce 计算所有元素的实际总和,然后从目标总和中减去它(n(a0+an)/2)。这会为您提供缺失的号码。

var o = [1,2,3,5,6,7,8];

var len = o.length;
var sum = (len + 1) * (o[0] + o[len - 1]) / 2;
var res = sum  - o.reduce((x,y) => x + y);

console.log(res);

请注意,这适用于任何起始值和任何步骤,例如对于 [3,5,7,11],它将正确打印 9。唯一的要求是 o 应该是等差级数。

关于javascript - 使用 .reduce 查找序列中缺失的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42887880/

相关文章:

javascript - 我如何让 Promise.all 按预期执行我的 promise ?

javascript - 有人可以解释 WebRTC API 文档吗?

javascript - 谷歌浏览器 - 这是 BUG 吗? Javascript 问题?触摸屏输入不工作

javascript - 使用 Node JS 在 Firebase 托管中单独路由

javascript - 暂时禁用所有事件

javascript - axios POST 请求(javascript)和 Sinatra/Base API(ruby)的问题

javascript - Javascript 或 jQuery 中的脚本或插件的生命周期

javascript - 奇怪的 JavaScript 错误,由语法、Cytoscape Web 或 jQuery 引起

javascript - 'this' 在使用前分配给 var?

javascript - 将整数列表发送到 REST API 会抛出 415(不支持的媒体类型)