Esercizio Javascript

di il
1 risposte

Esercizio Javascript

Sarò breve. Sto imparando un pò di javascript qui http://eloquentjavascript.net. Chiedo aiuto per la comprensione di una soluzione ad un esercizio. La soluzione la si può trovare qui http://eloquentjavascript.net/code/#5. (cliccando sull'apposito bottone in fondo per mostrare la soluzione). Vi dico solo che ancestry è un array di oggetti che rappresentano persone, in quanto qui potete visionare il testo dell'esercizio http://eloquentjavascript.net/05_higher_order.htm (è il 3). Ripropongo il codice della soluzione dell'esercizio:
function average(array) {
  function plus(a, b) { return a + b; }
  return array.reduce(plus) / array.length;
}

function groupBy(array, groupOf) {
  var groups = {};
  array.forEach(function(element) {
    var groupName = groupOf(element);
    if (groupName in groups)
      groups[groupName].push(element);
    else
      groups[groupName] = [element]; //??????????? riga 13
  });
  return groups;
}

var byCentury = groupBy(ancestry, function(person) {
  return Math.ceil(person.died / 100);
});

for (var century in byCentury) {
  var ages = byCentury[century].map(function(person) {
    return person.died - person.born;
  });
  console.log(century + ": " + average(ages));
}
La riga di codice non chiara l'ho evidenziata con una serie di punti di domanda. Praticamente se un determinato secolo è presente in groups, aggiungo la persona a quel secolo con il metodo push mentre se il secolo non è presente in teoria dovrei aggiungerlo e poi aggiungere la persona a quel particolare secolo, cosa che dovrebbe fare la riga che non ho capito. Perchè c'è l'oggetto element tra parentesi quadre? Ho provato a stampare l'oggetto groups subito dopo la famosa riga evidenziata(in else tra parentesi graffe) per vedere come evolveva groups . La cosa strana è che al primo ciclo, dopo la riga 13 , groups non contiene solo un elemento come mi sarei aspettato , ma contiene tutti gli elementi . Forse ho sbagliato qualcosa. Ecco il codice con la modifica fatta :
function groupBy(array, groupOf) {
  var groups = {};
  array.forEach(function(element) {
    var groupName = groupOf(element);
    if (groupName in groups)
      groups[groupName].push(element);
    else{
      groups[groupName] = [element];
      console.log(groups);}
  });
  return groups;
}

1 Risposte

  • Re: Esercizio Javascript

    Credo di aver capito del perché alla riga 13 l'oggetto element si trovi tra parentesi quadre. Penso proprio sia dovuto al fatto che le varie proprietà individuate con il numero di un determinato secolo contengono array. Mettendo element tra parentesi quadre si segnala a JavaScript proprio questo. Rimane però lo strano comportamento individuato quanto stampo groups con console.log dopo la riga 13
Devi accedere o registrarti per scrivere nel forum
1 risposte