javascript - 查找数组中出现奇数次的 int JavaScript

标签 javascript

问题是找到数组中出现奇数次的整数 例如: [1,1,1,1,1,1,10,1,1,1,1] 应返回 10[5,4 ,3,2,1,5,4,3,2,10,10] 应返回 1

我的代码通过了除这两个之外的所有测试。我不知道为什么有人能解释一下吗?

function findOdd(A) {
  var keyCounts = {};
  var topKey = {};
  A.forEach(function(item, val) {
    keyCounts[item] = keyCounts[item] + 1 || 1;
    if (keyCounts[item] % 2 !== 0) {
      topKey = item;
    } 
  });
  return topKey;
}

最佳答案

您的代码失败,因为您在迭代数组时检查“奇数”计数,因此每次它找到任何新数字时,它都会覆盖topKey.

要解决这个问题,首先计算数字,然后迭代找到的 keyCounts 对象以查找哪个是奇数:

function findOdd(A) {
    let counts = A.reduce((p, n) => (p[n] = ++p[n] || 1, p), {});
    return +Object.keys(counts).find(k => counts[k] % 2) || undefined;
}

关于javascript - 查找数组中出现奇数次的 int JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43230595/

相关文章:

javascript - 按特定字母对 JS 字符串数组进行排序

javascript - 文件上传 jquery 而不是预览文件,它在下面的新窗口中显示链接

javascript - jQuery 移动触摸事件处理、this 关键字上下文以及正确使用闭包

php - 如何创建触发文件下载的链接?

javascript - 如何从 anchor 标记获取值并将其用于另一个函数

javascript - 使用 Backbone.Marionette 从 JSON 动态生成站点导航

JavaScript 从服务器获取文件

javascript - 如何使用Lodash让这个映射变得更简单?

javascript - 尝试使用 Angular2 表单模型做条件验证器。尝试使用 myForm.setValidators(),但似乎不起作用

javascript - OrthographicCamera 无法渲染整个场景