数组中的值出现奇数次-这里发生了什么?

问题描述 投票:-1回答:1

我遇到了这段代码,当我检查如何找到的数字,出现奇数次.我试图了解一切,但我ca弄清楚这一点.请告诉发生了什么事一步一步,每个变量意味着什么。

谢谢你!

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 arrays object reduce
1个回答
1
投票
  • reduce 是一个数组方法,它应该减少一个数组到一个单一的值,这可能是一个数组本身,一个对象或任何平面变量的类型。
  • reduce 将取一个函数和一个初始累积对象作为参数。
  • 该函数对数组中的每个元素进行调用,并将累积对象作为第一个参数(p)和单个数组项作为第二个参数(n)。
  • 在这种情况下,该函数是一个 箭头函数表达式
  • 函数体由两个表达式组成,通过 逗号符. 逗号运算符将返回最右边的表达式作为结果,在本例中是指 p.
  • 逗号运算符的第一个表达式(p[n] = ++p[n] || 1)将返回 1 如果 p[n] 不设置,否则将增加 p[n] 并返回结果。感谢 短路评估 的逻辑OR (||)
  • 这一点可以写得更详细一些,如
A.reduce(function (p, n) {
  if (p[n]) {
    p[n] = p[n] + 1
  } else {
    p[n] = 1
  }
  return p
}, {});
  • 结果,你收到一个对象,它计算数组中每个值的出现次数。

  • 然后你有 return 语句,将返回 counts 奇异值

  • 它的做法是首先创建一个由 countsObject.keys.
  • 然后它遍历这些键并检查,是否有 微分 以2(% 2)的值对应的每一个键都是一个真值(本例中不是零),然后返回该键。
  • 它将总是返回第一个具有该属性的键。
  • 在最后,这个找到的值会被转换为一个数字,并以 单元加运算符
  • 如果没有找到值,则返回undefined。

0
投票

这里使用了2种方法,你需要了解。

  1. reduce : 在这里阅读 https:/developer.mozilla.orgen-USdocsWebJavaScriptReferenceGlobal_ObjectsArrayreduce。

  2. 找到阅读这里。 https:/developer.mozilla.orgen-USdocsWebJavaScriptReferenceGlobal_ObjectsArrayfind。

下面的语句是一个数字与它的出现率的图谱

let counts = A.reduce((p, n) => (p[n] = ++p[n] || 1, p), {})

然后第二条语句在地图上搜索一个出现次数为奇数的元素,如果没有找到这样的元素,则返回undefined。

return +Object.keys(counts).find(k => counts[k] % 2) || undefined

© www.soinside.com 2019 - 2024. All rights reserved.