javascript - 查找数组中的异常值
问题描述
我编写了一个函数,它给定一个包含所有奇数和一个偶数的数组,它返回一个偶数。给定一个包含所有偶数和一个奇数的数组,它返回一个奇数。
ex :findOutlier([2,6,8,10,3])
将返回 3,因为它是数组中唯一的奇数
我已经让它工作了,但由于某种原因,它不适用于某些大的负数?它返回未定义而不是异常值。
这是我的代码:
function findOutlier(integers){
let testingForOdds = true;
let evenCounter = 0;
let oddCounter = 0;
for (let i = 0; i < 3; i++){
if (integers[i] % 2 === 0){
evenCounter = evenCounter + 1
if (evenCounter === 2){
testingForOdds = true;
}
}
else if (integers[i] % 2 === 1){
oddCounter = oddCounter + 1
if (oddCounter === 2){
testingForOdds = false;
}
}
}
if (testingForOdds){
for (let i = 0; i < integers.length; i++){
if (integers[i] % 2 === 1){
return integers[i]
}
}
} else {
for (let i = 0; i < integers.length; i++){
if (integers[i] % 2 === 0){
return integers[i]
}
}
}
}
findOutlier([-100000000007, 2602, 36]);
出于某种原因,findOutlier([-100000000007, 2602, 36]);
返回未定义。但是,findOutlier([2,6,8,10,3])
会成功返回 3. 为什么会这样?
解决方案
正如迈克尔指出的那样,您会遇到问题,因为-100000000007 % 2
评估为-1
. 作为旁注,您可以优化逻辑以减少比较次数,如下所示:
function findOutlier(arr) {
let isEven = true;
const a = arr[0];
const b = arr[1];
if (([-1, 1].includes(a % 2) && [-1, 1].includes(b % 2))) {
isEven = false;
} else if (!(a % 2 === 0 && b % 2 === 0)) {
const c = arr[2];
if (c % 2 === 1) isEven = false;
}
for (let i = 0; i < arr.length; i += 1) {
const even = arr[i] % 2 === 0;
if (even !== isEven) return arr[i];
}
}
推荐阅读
- c# - 避免添加 nuget 包引用以支持程序集引用的可能性,包括。依赖?
- powershell - C# 的默认运算符是否有 PowerShell 等效项,如果有,语法是什么?
- wordpress - 为什么 the_title() 在我调用循环之前返回帖子的标题?
- android - 更新处于 KIOSK 模式的托管 Google Play 应用
- c# - NBuilder 从 0 开始整数
- python - tf2 中的张量运算
- python - pyqt5:无法连接到显示器
- javascript - 在特定时间显示 div 在月份更改时重置
- html - 如何在Angular 8中检测角度值是否被用户更改或方法调用是否已更改
- symfony - PhpStorm 用省略号替换模板名称 - 如何将其关闭?