Simona, come crei l'array? Posta il codice...
Ho un problema con gli Array javascript.
In realtà l' "array" è una matrice 15x2. La mia necessità è quella di eliminare l'ultimo elemento oppure (ancor meglio) un elemento con un determinato indice di questa matrice.
Come si può eliminare un elemento dalla matrice?
Vi spiego con un esempio:
Ho questa matrice 4x2:
A B
B C
C A
A D
Ad un certo punto ho la necessità di eliminare una coppia random dalla matrice (ad esempio B C).
La soluzione che uso fin ora è: sposto verso l'alto di 1 tutti gli elementi successivi a B C , e considero la matrice di dimensioni 3x2 . Ma in realtà (essendo la matrice nata come 4x2) viene mantenuto in memoria un ultimo elemento in fondo alla matrice.
Come posso eliminarlo definitivamente?
Il mio problema è che non posso usare la funzione Array.remove(index) perchè ho una matrice da manipolare (quindi gli indici sarebbero 2), e non un array.
Simona, come crei l'array? Posta il codice...
Luca Ruggiero
Resp. didattico www.mrwcorsi.it
Uso una funzione che ho preso dalla rete:
Inizializzo la matrice con tutte le possibili coppie dell'array di "elementi" (l'array è di 6 elementi e le possibili coppie sono 15):Codice:function TO_array() { var $dime = arguments.length; var $elem = new Array($dime); var TO_temp; var TO_str = ""; for (var TO_i = 1; TO_i < $dime; TO_i++) if (isNaN($elem[TO_i] = parseInt(arguments[TO_i - 1],10))) { alert("La funzione TO_array richiede valori numerici"); $dime = 0; } do { TO_temp = ""; for ($elem[--TO_i]; $elem[TO_i] > 1; --$elem[TO_i]) TO_temp += "new Array(" + TO_str + "),"; TO_temp += "new Array(" + TO_str + ")"; TO_str = TO_temp; } while(--$dime > 1 && 0 != TO_i); TO_str = "new Array(" + TO_str + ")"; return eval(TO_str); } // Fine funzione TO_array
Per accedere alla matrice uso i due indici, così ad esempio:Codice:function inizializzaMatriceCoppie(elementi){ var matrice = TO_array(15,2); var pos = 0; var riga = 0; for (i = pos; i < 5; i++) { //prendo 1 elemento for (j = i+1; j < 6; j++) { //prendo un elemento con indice successivo nell'array matrice[riga][0] = elementi[i]; matrice[riga][1] = elementi[j]; riga++; } pos++; } return matrice; }
matrice[0][1]
Ultima modifica di simo!; 04-04-2006 alle 11:39
In sostanza crea un array bidimensionale che in Javascript è molto difficile da gestire... Scusami se salto di palo in frasca: l'esigenza finale qual'è? Allo strumento (array o altro) pensiamo dopo...
Luca Ruggiero
Resp. didattico www.mrwcorsi.it
Spero di riuscirmi a spiegare con parole povere:
questa matrice è inizializzata con tutte le possibili coppie di elementi.
Faccio un esempio semplice: se gli "elementi" sono A B C , inizializzerò una matrice 3x2 contenente queste coppie:
A B
A C
B C
(Nel codice la matrice è 15x2 perchè l'array "elementi" è di dimensione 6 e non 3 come nel precedente esempio).
Il risultato finale deve essere una matrice "randomizzata verticalmente", cioè devo avere una matrice in cui le coppie vengano ordinate (in modo random) così, ad esempio:
A C
B C
A B
Per fare questo uso una nuova matrice in cui inserisco sequenzialmente la coppia di indici [num_random][0] e [num_random][1].
Seguendo l'esempio precedente: il primo numero random è 1, perciò inserisco in matriceFinale[0][0] e [0][1] la coppia [1][0],[1][1] (quindi A C va in prima posizione) e così via.
Il problema sta nel fatto che devo "eliminare" dalla matrice iniziale la coppia [1][0],[1][1], e considerare solo gli elementi (A B, B C) per la prossima "estrazione random".
Se non hai capito provo a rispiegarlo, comunque in sostanza quello che devo fare è cambiare l'ordine alle coppie della matrice ("scambiandole di riga"). Il problema che ho è quello di eliminare ogni volta l'elemento dalla matrice iniziale.
Ultima modifica di simo!; 04-04-2006 alle 11:55
Simone il discorso è chiaro, solo che credo di non esserlo stato io
Quella che hai descritto, in un certo senso, è la soluzione... io intendevo dire qual'è lesigenza, il problema, chiaro?
Dunque... in ogni caso un consiglio a prescindere:
var elementi = new Array();
elementi[0] = "A#A";
elementi[1] = "A#B";
elementi[2] = "A#C";
su elementi[N] fai lo split degli elementi contenuti per il carattere #
vedi se può andare...
Luca Ruggiero
Resp. didattico www.mrwcorsi.it
Sono riuscita a risolvere usando semplicemente la funzione splice degli Array!!!!
Problema risolto!
Grazie lo stesso per la disponibilità!
ma la si figuri![]()
Luca Ruggiero
Resp. didattico www.mrwcorsi.it
Una domanda-consiglio:
se si metteva tutto in una variabile stringa e si modellava di conseguenza?