为什么JS筛选负奇数时n%2===1失效,n%2!==0可行?
问题原因解析
核心问题:JavaScript取模运算的符号规则
你原来的判断条件n % 2 === 1失效,是因为JavaScript的取模运算结果符号和被除数一致。
比如数组里的-7,执行-7 % 2时,结果是-1而不是1——因为被除数是负数,取模结果也会保持负号。所以-7 % 2 === 1这个判断永远为false,自然筛选不到任何负奇数,得到空数组。
为什么n % 2 !== 0能正常工作?
所有奇数(无论正负)对2取模的结果要么是1要么是-1,这两个值都不等于0。所以n % 2 !== 0能准确匹配所有奇数,再结合n < 0的条件,就能正确筛选出负奇数。
额外的可行写法
如果你还是想用等于1的判断逻辑,可以先取绝对值再判断:
let negativeOdd = arr.filter(n => Math.abs(n) % 2 === 1 && n < 0);
这样不管是正奇数还是负奇数,取绝对值后对2取模都是1,再配合n < 0就能筛选出目标值。
内容的提问来源于stack exchange,提问作者Titus Williams
相关产品推荐
相关产品推荐

