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
對不起,不得不接我的妻子。如果你還有問題,請告訴我。 –