Sto solo imparando come utilizzare le funzioni di ordine superiore di JS (mappa, perOgni, riduci, ecc.) E sono incappato in confusione. Sto cercando di scrivere una semplice funzione 'intervallo', ma non riesco a popolare la mia matrice di output. Questo è l'obiettivo:forEach su un 'nuovo array' non sta facendo quello che mi aspetto
range(1, 4) // [1, 2, 3, 4]
sto ottenendo questo:
[undefined × 4]
Qui è il mio codice:
function range(num1, num2) {
var rangeArr = new Array((num2 + 1) - num1);
return rangeArr.map(function(e, i, arr) {return arr[i] = num1 + i});
}
Che cosa mi manca qui? Per quanto posso dire, il problema sembra avere qualcosa a che fare con il modo in cui sto usando il "nuovo array", ma oltre a ciò sono perso.
Oh, ed ecco la parte che mi confonde davvero. Funziona bene:
function bleck() {
var blah = [1, 2, 3, 4];
var x = 'wtf';
return blah.map(function(e, i, arr) {return arr[i] = x})
}
["wtf", "wtf", "wtf", "wtf"]
Grazie !!
Non pensare di aver bisogno "(num2 + 1) - num1)", poiché javascript usa matrici dinamiche. – Serdnad
@Serdnad Non è necessario, ma costruisce una matrice vuota di quella lunghezza: 'Array (4) = [indefinito x 4]' – cincodenada
Nota sull'uso di '.map()' che non è correlato al tuo problema: in il tuo callback non ha bisogno di avere 'return arr [i] = num1 + i', puoi semplicemente dire' return num1 + i; '. Non ha senso impostare i valori in 'arr' - che è lo stesso array di' rangeArr' - perché 'map' costruisce un nuovo array ed è ciò che si sta restituendo dalla funzione' range() '. – nnnnnn