【发布时间】:2022-01-18 13:17:41
【问题描述】:
任务 给定一个整数数组,找出出现奇数次的那个。
总是只有一个整数出现奇数次。
示例 [0,1,0,1,0] 应该返回 0,因为它出现了 3 次(这是奇数)。 [1,2,2,3,3,3,4,3,3,3,2,2,1] 应该返回 4,因为它出现了 1 次(这是奇数)。
我看到了这个解决方案,但我很难理解它为什么起作用的逻辑:
例如
function findOdd(arr) {
return arr.find((item) => arr.filter(el => el == item).length % 2)
}
console.log(findOdd([20,1,-1,2,-2,3,3,5,5,1,2,4,20,4,-1,-2,5])) // returns 5
如果数字一定是奇数,为什么不是....length % 2 !== 0;
我真的很感激任何帮助!谢谢:)
【问题讨论】:
-
在 JS
0 == false(大致相等)中,非 0 数是“真实的”(在布尔上下文中被视为真实) -
它获取您的数组,然后将其过滤为仅包含“相同”,然后检查长度(出现次数)并检查这是否是奇数时间。所有包裹在
find()中的东西都只会返回一次,它第一次验证true... 所以给定示例数组,find 首先验证20 是否出现奇数次, - 它没有,然后检查 1,然后检查 -1,然后检查 2,……等等,直到达到 5,验证为真,然后find()返回数组的那个元素;)
标签: javascript arr