【发布时间】:2020-01-02 00:21:31
【问题描述】:
当答案仅为负奇数时,我的函数失败(返回未定义)。 否则它工作。 有谁知道为什么?
说明:
给你一个包含整数的数组(长度至少为 3,但可能非常大)。数组要么完全由奇数组成,要么完全由偶数组成,除了单个整数 N。编写一个将数组作为参数并返回此“异常值”N 的方法。
我的代码:
function findOutlier(integers) {
let binary = integers.map((int, i) => int % 2);
let count = 0;
for (let i = 0; i < binary.length; i++) {
if (binary[i] == 0)
count++;
}
if (count > 1) {
return integers[binary.indexOf(1)]
} else {
return integers[binary.indexOf(0)]
}
}
【问题讨论】:
-
在失败的情况下,你为
integers传递了什么? -
最好的办法是使用浏览器和/或 IDE 中内置的调试器,并在返回语句上设置断点。可能最好将调用拆分为
indexOf,这样您就可以找出哪个没有返回您所期望的(它似乎返回-1,当然,integers[-1]是@ 987654326@). -
值得注意的是,您的函数最多可以遍历数据三次(
map一次完整遍历,for循环的另一次完整遍历,@987654329 中的第三次可能部分遍历@),即使作业说 "...but could be very large..." 这表明您可能希望尽可能避免这种情况。但是,永远不需要到离群值之外超过两个地方才能知道它在哪里(如果离群值是第一个条目,那就是这样),并且在大多数情况下,你一遇到它就会知道它在哪里(因为您会事先至少看到两个赔率或偶数)。
标签: javascript arrays