我遇到了这段代码,当我检查如何找到的数字,出现奇数次.我试图了解一切,但我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;
reduce
是一个数组方法,它应该减少一个数组到一个单一的值,这可能是一个数组本身,一个对象或任何平面变量的类型。 reduce
将取一个函数和一个初始累积对象作为参数。 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
奇异值
counts
与 Object.keys
.% 2
)的值对应的每一个键都是一个真值(本例中不是零),然后返回该键。这里使用了2种方法,你需要了解。
reduce : 在这里阅读 https:/developer.mozilla.orgen-USdocsWebJavaScriptReferenceGlobal_ObjectsArrayreduce。
找到阅读这里。 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