PDA

View Full Version : [JS] Creare una variabile dinamicamente tramite Ciclo For


robertino_salemi
16-03-2014, 16:49
Salve a tutti,
come posso creare una variabile con nome dinamico grazie ad un ciclo for?

Avevo scritto:


for(i=0; i=pax; i++){
var paxDetailSurname '' + i = $("#ospiti_details_surname_"+i).val();
var paxDetailName '' + i = $("#ospiti_details_name_"+i).val();
}


ma da errore!

Grazie.

OoZic
16-03-2014, 18:18
non è la prima volta che te lo dico, spero possa essere l'ultima anche perchè mi pare in uno dei tuoi post precedenti dicesti "comincerò ad usarlo".

http://jsfiddle.net/DWmVC/

premi JSHINT e vedi cosa ti dice, ci sono ovviamente degli errori.

prima di pensare a come fare quello che chiedi sarebbe cosa opportuna verificare il codice scritto almeno.

scusa l'acidità ho appena perso qualche game a league of legends e mi rende acido :D

robertino_salemi
16-03-2014, 23:46
Hai pienamente ragione! :D

L'ho modificato così: http://jsfiddle.net/DWmVC/9/

Credo che funzioni, domani lo testo direttamente sul mio modulo.

Grazie ancora.

robertino_salemi
17-03-2014, 18:58
Alla fine sto provando con un array bidimensionale, ma non va, mi da errore e non capisco il perchè!


ospiti = [];

for(i=0; i<pax; i++){
ospiti[i] = {};
alert($("#ospiti_details_surname_"+i).val());
ospiti[i].paxDetailSurname = $("#ospiti_details_surname_"+i).val();
alert($("#ospiti_details_name_"+i).val());
ospiti[i].paxDetailName = $("#ospiti_details_name_"+i).val();
}

console.log(ospiti[0].length); //stampa undefined
console.log(ospiti[1].length); //stampa undefined

for (x=0; x<ospiti[0].length; x++)
{
for (y=0; y<ospiti[1].length; y++)
{
console.log(ospiti[x][y]);
}
}


:muro:

jeremy.83
18-03-2014, 08:31
Ma fare 2 array?


var ar1=[];
var ar2=[];
for(var i=0;i<pax;i++){
ar1.push($("#ospiti_details_surname_"+i).val());
ar2.push($("#ospiti_details_name_"+i).val());
}



Poi vabè non so cosa devi fare

robertino_salemi
18-03-2014, 11:27
Ma fare 2 array?


var ar1=[];
var ar2=[];
for(var i=0;i<pax;i++){
ar1.push($("#ospiti_details_surname_"+i).val());
ar2.push($("#ospiti_details_name_"+i).val());
}



Poi vabè non so cosa devi fare

E' vero, a volte le strade più semplici sono le migliori!

Diciamo che alla fine ho risolto per altre strade, ma vorrei capire come fare per una prossima volta.

Daniels118
18-03-2014, 11:36
Prima di tutto l'array ospiti è popolato dal ciclo che conta da 0 a pax-1, quindi gli indici 0 e 1 sono definiti solo per pax>=2.
Secondo, l'istruzione
ospiti[i] = {};
non crea un array ma un oggetto; gli oggetti non hanno una proprietà predefinita length, che è una caratteristica degli array.
Se vuoi sfruttare la proprietà length devi creare un array, così:
ospiti[i] = [];
Però gli array non possono avere indici non numerici, quindi l'istruzione
ospiti[i].paxDetailSurname
non incrementerebbe il valore di length.
In alternativa puoi continuare a definire gli ospiti come oggetti, ma invece di utilizzare length per iterare sulle proprietà, utilizzi un ciclo for..in

robertino_salemi
19-03-2014, 10:26
Daniels, grazie per la soluzione proposta, ho risolto il problema!