0
在过去,我已经解决了类似下面这个问题的问题,我通过将对象键分配给当前值或0来计算字母出现在字符串中的次数,然后每当字母再次出现时加1。请参阅下面的提示。设置对象键值时的括号放置JavaScript
var letterCount = function(str) {
noPuncStr = str.replace(/[^a-z]/ig, "")
// noPuncStr = str.replace(/[^\w]/ig, "") //same thing except underscores would be allowed
// console.log(noPuncStr);
var result = {};
for (var i = 0; i < noPuncStr.length; i++) {
result[noPuncStr[i]] = (result[noPuncStr[i]] || 0) + 1 //THIS LINE. I set the key to its current value if truthy or 0 then add 1
}
return result;
}
console.log(letterCount("a%b& c*da"));
我完成了一个类似这类问题,我试图做同样的事情,除了我想一键设置为自己或空数组,如果错误地再到当前值推到的结果钥匙。但是当我这样做时,我得到了一个TypeError:(result [value] || [])。push不是一个函数。基于查看其他问题的答案,我意识到我可以通过将括号放在行的左端来解决问题,而不是将它放在=之后,就像我在上面的letterCount问题中所做的那样。为什么会这样?为了更好地说明我在说什么正确的解决方案,我指的是下面的内容。
Array.prototype.groupBy = function(fn) {
var result = {};
if (arguments.length === 0) {
this.forEach(function(value){
(result[value] = result[value] || []).push(value); /*WHY is the (
all the way on the left of the line instead of after the equals sign
like in letterCount?*/
})
return result;
} else {
this.forEach(function(value){
(result[fn(value)] = result[fn(value)] || []).push(value);
})
return result;
}
}
我很感激任何帮助!
我仍然不解,为什么你是对的。哎呦会再次编辑和精心制作。这里:result [value] =(result [value] || [])。push('Hmm');在下一个例子中(result [value] = result [value] || []),result [value]被设置为[],但当成功为[]时,变成[]和[] .push(“hmm”推入它,它成为成功?为什么[] .push('hmm')返回1而[] .push(“成功”)给你[“成功”] – MattGoldwater
不用担心响应。想通了。 – MattGoldwater
对不起,不得不接我的妻子。如果你还有问题,请告诉我。 –