【发布时间】:2016-10-11 06:09:58
【问题描述】:
我正在尝试使用reduce() 方法在一组(有时几乎是)连续数字中找到一个跳过(缺失)的数字。最多只会丢失一个数字。
这是我的代码笔:http://codepen.io/PiotrBerebecki/pen/zBrRVd
例如,findMissing([1,2,3,5]) 应该返回 4 findMissing([1,2,3,4]) 应该返回 undefined findMissing([2,3,4,6]) 应该返回 5findMissing([2,4,5,6])应该返回 3
如果确实有一个数字被跳过,我开发的代码似乎可以正常工作。但如果所有数字都存在,它会返回一个不需要的值。你知道怎么解决吗?
我的 JS 代码:
function findMissing(arr) {
return arr.reduce(function(prev, curr) {
if (curr - prev !== 1) {
return curr - 1;
}
});
}
// This should return 4, and it indeed returns 4
console.log( findMissing([1,2,3,5]) );
// This should return 'undefined', but it returns 3
console.log( findMissing([1,2,3,4]) );
// This should return 5, and it indeed returns 5
console.log( findMissing([2,3,4,6]) );
更新 1:
根据下面的答案,以下代码使用 reduce() 方法提供了预期的结果:
// ****SOLUTION:****
function findMissing2(arr) {
return arr.reduce(function(prev, curr, index, array) {
if (curr === index + array[0]) {
return prev;
} else {
return index + array[0]++;
}
}, void 0);
}
console.log( findMissing2([1,2,3,4]) ); // Undefined
console.log( findMissing2([1,2,3,5]) ); // 4
console.log( findMissing3([2,3,4,6]) ); // 5
console.log( findMissing2([2,3,4,5]) ); // Undefined
console.log( findMissing2([2,4,5,6]) ); // 3
【问题讨论】:
-
既然你有一个“基本情况”,你可以用递归(甚至用一个while循环)来做(我认为效率更高)。
-
如果缺少一个以上的数字会发生什么,例如
[1, 4]或[1, 3, 5]? -
在这个任务中保证它只会丢失 1 个数字。
标签: javascript arrays loops numbers reduce