2016-07-14 74 views
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; 
    } 
} 

我很感激任何幫助!

回答

2

push()方法返回數組的長度:

實施例:

var a = ['a', 'b', 'c']; 
 
console.log(a.push('d')); //4

如果放置這樣的括號:

result[value] = (result[value] || []).push('Hmm); 

&hellip;那麼result[value]就會變成數組的長度,這不是你想要的。

實施例:

var result = {}, 
 
    value = 'v'; 
 
    
 
result[value] = (result[value] || []).push('Hmm'); 
 
console.log(result[value]); //1

通過將括號這樣的:

(result[value] = result[value] || []).push('Success'); 

&hellip; result[value]初始化爲空數組如果需要括號內,然後Success被推入它。

例子:

var result = {}, 
 
    value = 'v'; 
 
    
 
(result[value] = result[value] || []).push('Success'); 
 
console.log(result[value]); //Success

+0

我仍然不解,爲什麼你是對的。哎呦會再次編輯和精心製作。這裏:result [value] =(result [value] || [])。push('Hmm');在下一個例子中(result [value] = result [value] || []),result [value]被設置爲[],但當成功爲[]時,變成[]和[] .push(「hmm」推入它,它成爲成功?爲什麼[] .push('hmm')返回1而[] .push(「成功」)給你[「成功」] – MattGoldwater

+0

不用擔心響應。想通了。 – MattGoldwater

+0

對不起,不得不接我的妻子。如果你還有問題,請告訴我。 –