PDA

View Full Version : [JS] Conteggio degli Zeri


legolas93
28-12-2011, 18:58
Ragazzi so che è stupido stupido come programma ma sto imparando.. e non capisco dov'è l'errore :cry:

function forEach(array, action) {
for (var i = 0; i < array.length; i++)
action(array[i]);
}

var base=0;

function reduce(combine, base, array) {
forEach(array, function (element) {
base = combine(base, element);
});
return base;
}

function countZeroes(numeri){
return reduce(function (a, b){if (b===0) {a=a+1; return a;}}, 0, numeri);
}

alert(countZeroes([0,23,0,23,4,0,0,4]));

In pratica dovrebbe contare gli 0 nell'ultimo array.

Avete qualche idea?..Continua a restituirmi Undefined :muro: :muro:

Gimli[2BV!2B]
28-12-2011, 23:09
Controlla return a;

legolas93
29-12-2011, 19:34
;36629680']Controlla return a;

function forEach(array, action) {
for (var i = 0; i < array.length; i++)
action(array[i]);
}

var base=0;

function reduce(combine, base, array) {
forEach(array, function (element) {
base = combine(base, element);
});
return base;
}

function countZeroes(numeri){
return reduce(function (a, b){if (b===0) {return a+1;}}, 0, numeri);
}

show(countZeroes([0,23,0,23,4,0,0,4]));

Ho modificato leggermente ma non ho ancora risolto l'errore. L'alert continua a visualizzarmi "Undefined".

Potresti essere più preciso? :)

Grazie!

Gimli[2BV!2B]
29-12-2011, 19:42
Si tratta di una subdola stupidata: non ritorni sempre qualcosa, il return è annidato in una graffa di troppo.
La funzione anonima passata a reduce finisce per "ritornare" undefined tutte le volte che non incontra uno zero.function forEach(array, action) {
for (var i = 0; i < array.length; i++)
action(array[i]);
}

var base=0;

function reduce(combine, base, array) {
forEach(array, function (element) {
base = combine(base, element);
});
return base;
}

function countZeroes(numeri){
return reduce(function (a, b){if (b===0) {a=a+1; } return a; }, 0, numeri);
}

alert(countZeroes([0,23,0,23,4,0,0,4]));

legolas93
29-12-2011, 20:40
;36635102']Si tratta di una subdola stupidata: non ritorni sempre qualcosa, il return è annidato in una graffa di troppo.
La funzione anonima passata a reduce finisce per "ritornare" undefined tutte le volte che non incontra uno zero.function forEach(array, action) {
for (var i = 0; i < array.length; i++)
action(array[i]);
}

var base=0;

function reduce(combine, base, array) {
forEach(array, function (element) {
base = combine(base, element);
});
return base;
}

function countZeroes(numeri){
return reduce(function (a, b){if (b===0) {a=a+1; } return a; }, 0, numeri);
}

alert(countZeroes([0,23,0,23,4,0,0,4]));


Ahh.. :D In pratica JS restituisce "Undefined" se non incontra un return. Mi mancava questa conoscenza e quindi facevo fatica ad identificare la graffa posizionata male.

Sei un grande. Grazie :)

Gimli[2BV!2B]
29-12-2011, 20:57
Prego, in tutti i casi complimenti per la follia di questa conta :)

Tra l'altro la variabile base contemporaneamente globale ed argomento mi fa un po' deragliare la psiche... non ho ancora afferrato al 100% che strada segue, però funziona.

Edit: ok, funziona anche eliminando base globale, ora mi sento più sollevato...

legolas93
30-12-2011, 19:31
;36635630']Prego, in tutti i casi complimenti per la follia di questa conta :)

Tra l'altro la variabile base contemporaneamente globale ed argomento mi fa un po' deragliare la psiche... non ho ancora afferrato al 100% che strada segue, però funziona.

Edit: ok, funziona anche eliminando base globale, ora mi sento più sollevato...

Nono tranquillo!..Quello era solo un rimasuglio di un mio test..Per cercare di capire dove veniva fuori Undefined :)

Solo che ora ho un altro problema che mi fa deragliare veramente..ma apro un altro thread. :read: