【发布时间】:2021-03-30 06:11:06
【问题描述】:
我一直在尝试回答这个偶然发现 Codewars 的问题。
给你一个包含整数的数组(长度至少为 3,但可能非常大)。数组要么完全由奇数组成,要么完全由偶数组成,除了单个整数 N。编写一个将数组作为参数并返回此“异常值”N 的方法。
这是我最初的回答。
let array = [0, 1, 2];
function findOutlier(integers) {
let evens = integers.filter(item => {
if (item % 2 === 0 || item === 0) {
return item;
}
});
let odds = integers.filter(item => {
if (item % 2 !== 0) {
return item;
}
});
if (evens.length > 1) {
return odds[0];
} else {
return evens[0];
}
}
console.log(findOutlier(array));
但显然 item === 0 在上面的代码中不起作用,它返回 [2] 作为 evens 的值(漏掉 0 个)。 然后我像下面这样更改了代码,它可以工作了!
let array = [0, 1, 2];
function findOutlier(integers) {
let evens = integers.filter(item => {
if (item = 0 || item % 2 === 0) {
return item;
}
});
let odds = integers.filter(item => {
if (item % 2 !== 0) {
return item;
}
});
if (evens.length > 1) {
return odds[0];
} else {
return evens[0];
}
}
console.log(findOutlier(array));
我仍然很困惑为什么比较运算符在第一个代码中不起作用。 非常感谢您能帮助我理解..!
【问题讨论】:
-
过滤器应该返回一个布尔值而不是一个整数。整数 0 被认为是错误的,这会导致您的错误行为。此外, 0 mod 2 === 0 所以第二次检查是多余的。
item = 0是赋值,而不是比较。此外,您可以通过在 O(1) 内存中仅迭代一次数组来解决此任务(除了输入)。
标签: javascript comparison-operators