Aiuto urgente array Javascript

  • Creatore Discussione Creatore Discussione simo!
  • Data di inizio Data di inizio

simo!

Nuovo Utente
30 Mar 2006
19
0
0
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.
 
Uso una funzione che ho preso dalla rete:

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

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 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;
}

Per accedere alla matrice uso i due indici, così ad esempio:
matrice[0][1]
 
Ultima modifica:
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...
 
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:
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? :p

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...
 
Sono riuscita a risolvere usando semplicemente la funzione splice degli Array!!!!

Problema risolto :) !

Grazie lo stesso per la disponibilità!
 

Discussioni simili