我正在研究Javascript,我在Hackerrank中遇到了这个挑战(必须返回多少双袜子),我无法解决,所以我寻找答案,我找到了这个答案,但是我不明白为什么它会工作,比如,为什么在对象袜子中使用括号表示法来返回一些数字和一些未定义的数字?袜子应该是空的。
function sockMerchant(n, arr) {
// var sorted = arr.sort();
let socks = {}
let pairs = 0;
for (let i=0; i < n; i++) {
// console.log(socks[arr[i]])
socks[arr[i]] = socks[arr[i]] + 1 || 1;
if (socks[arr[i]] % 2 === 0) {
pairs += 1
}
}
return console.log(pairs)
}
sockMerchant(11, [10, 20, 20, 10, 10, 30, 50, 10, 20, 50, 50])发布于 2020-09-15 22:09:16
让我们分解一下这段代码:
我们打电话给sockMerchant(11, [10, 20, 20, 10, 10, 30, 50, 10, 20, 50, 50])
。
凉爽的。
我们设置默认值
let socks = {} //<- socks mapping object [sock_name, count]
let pairs = 0;现在,我们从0循环到n,并执行以下操作:
找到的袜子数量
socks[arr[i]] = socks[arr[i]] + 1 || 1;让我们进行一些迭代:
双对= 0
双对= 0
双对= 1
双对= 2
对=2
在对象/映射上使用括号符号既可以对值作出反应,也可以设置/创建值
最后但同样重要的是:
console.log总是返回未定义的。
使用return pairs
function sockMerchant(n, arr) {
// init
let socks = {}
let pairs = 0;
for (let i=0; i < n; i++) {
// bump sock 'arr[i]' count
socks[arr[i]] = socks[arr[i]] + 1 || 1;
// check if has a pair
if (socks[arr[i]] % 2 === 0) {
pairs += 1
}
}
return pairs
}
foundPairs = sockMerchant(11, [10, 20, 20, 10, 10, 30, 50, 10, 20, 50, 50])
// foundPairs = 4

https://stackoverflow.com/questions/63909174
复制相似问题