In der Vergangenheit habe ich Probleme wie dieses Problem unten gelöst, wobei ich die Anzahl der Buchstaben in einer Zeichenfolge zähle, indem ich einen Objektschlüssel dem aktuellen Wert oder 0 und dann zuweise Hinzufügen von 1 jedes Mal, wenn der Buchstabe erneut angezeigt wird. Siehe die Zeile, auf die ich unten Bezug nehme.Klammerplatzierung beim Festlegen des Wertes des Objektschlüssels 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"));
Ich habe gerade eine ähnliche Art von Problem, wo ich versuchte, das Gleiche zu tun, außer ich einen Schlüssel an sich selbst oder ein leeres Array, wenn falsch und dann setzen wollten den aktuellen Wert auf das Ergebnis drücken von der Schlüssel. Aber als ich das tat, bekam ich einen TypeError: (result [value] || []). Push ist keine Funktion. Basierend auf anderen Antworten auf das Problem erkannte ich, dass ich es gelöst haben könnte, indem ich die Klammern am linken Ende der Zeile platzierte, anstatt sie nach dem = zu setzen, wie ich es bei dem oben beschriebenen Problem mit dem Buchstaben count tat. Warum ist das der Fall? Um besser zu veranschaulichen, worüber ich spreche, ist die richtige Lösung und die Zeile, auf die ich mich beziehe, unten.
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;
}
}
Ich würde jede Hilfe zu schätzen wissen!
Ich bin immer noch verwirrt, warum hast du recht. Whoops wird jetzt wieder bearbeiten und bearbeiten. hier: result [Wert] = (result [Wert] || []). push ('Hmm'); wird [] und [] .push ("hmm") wird 1. Im nächsten Beispiel (result [value] = result [value] || []), result [value] wird auf [] gesetzt, wenn es erfolgreich ist hineingeschoben, wird es Erfolg? Warum gibt [] .push ('hmm') 1 zurück, während [] .push ("Erfolg") Ihnen ["Erfolg"] – MattGoldwater
geben kann. Dinge herausgefunden. – MattGoldwater
Sorry, musste meine Frau abholen. Wenn Sie noch Fragen haben, lassen Sie es mich wissen. –