2017-05-18 3 views
-1

Ich versuche, eine Algorithmusherausforderung zu tun. Ich habe diesen Code von einer der vollständigen Antworten gesehen. Ich bin neu in Javascript, also bin ich mir des Codes nicht ganz sicher. Ich weiß, dass der erste Abschnitt des Codes die Eingabe ziemlich nimmt und es zu einer Karte macht. Dann initiieren Sie ein MatchingPair-Array und einen Counter. Ich bin ziemlich verloren in der for-Schleife Abschnitt. Nicht sicher, was matchingPairs[""+c[i]] = matchingPairs[""+c[i]] || 0; tut. Ich schätze, dass die for-Schleife alle Elemente der passenden Paare zum Array hinzufügt und zum Counter addiert.Was bedeutet dieser Javascript-Code?

function main() { 
var n = parseInt(readLine()); 
c = readLine().split(' '); 
c = c.map(Number); 

var matchingPairs = {}; 
var matchingPairCount = 0; 

for(var i=0; i< c.length; i++) { 
    matchingPairs[""+c[i]] = matchingPairs[""+c[i]] || 0; 
    matchingPairs[""+c[i]] += 1; 

    if (matchingPairs[""+c[i]] % 2 === 0) { 
     matchingPairCount += 1; 
    } 
} 
console.log(matchingPairCount); 

}

+0

try 'var x = {}; x ['a'] = x ['a'] || 0; console.log (x); 'um zu sehen, was passiert - natürlich könnte auch die nächste Zeile darin eingefügt werden ...' x ['a'] = (x ['a'] || 0) + 1' –

+0

@ Andy.W Kennst du Python? 'x ['a'] || 0 'verhält sich wie ein 'defaultdict', das auf' 0 'auswertet, wenn keine Eigenschaft' a 'vorhanden ist (oder wenn die Eigenschaft' falsch 'auswertet). ''' + x' ist die Abkürzung für' String (x) '. –

+0

Aus Interesse ist dies eine Herausforderung Website? Wenn ja, welcher? – Ben

Antwort

0

Ein einfacheres Beispiel

a = {} 
a["b"] = a["b"] || 0 
console.log(a) // {b: 0} 

a wird in ein leeres Objekt gesetzt. a["b"] ist noch nicht auf irgendwas eingestellt, so dass beim Zugriff undefined zurückgegeben wird.

Undefined ist falsch - so wird a["b"] auf 0 gesetzt.

Nehmen Sie ein anderes Beispiel;

a = {b: 5} 
a["b"] = a["b"] || 0 
console.log(a) // {b: 5} 

Der einzige Unterschied in diesem Beispiel ist, dass a["b"] truthy ist (dh es gibt 5 statt undefined).

Dies ist ein JavaScript-Modus zum Setzen einer Variablen auf einen Wert nur, wenn es nicht bereits auf etwas anderes gesetzt wurde.

0

Eine Zeichenfolge mit Leerzeichen abgegrenzten Zahlen wird geliefert.

Die Zählungen jeder Zahl werden berechnet.

Jedes Mal, wenn eine Zählung gerade ist, wird die matchingPairCount inkrementiert.

Kurz gesagt: es zählt Paare von übereinstimmenden Zahlen.

n wird nicht verwendet?