2013-06-15 15 views
18

mi rendo conto che c'è un sacco di argomenti su questo argomento, ma credo che questo è diverso:Rimozione valore dalla matrice su percorso specifico

L'obiettivo è quello di ottenere un valore da un array in una posizione casuale quindi eliminare questo valore.

Io uso questa parte da John Resig (il creatore di jQuery) per rimuovere un elemento, ma non sembra di ascoltare la posizione lo do

Array.prototype.remove = function(from, to) { 
var rest = this.slice((to || from) + 1 || this.length); 
this.length = from < 0 ? this.length + from : from; 
return this.push.apply(this, rest); 
}; 

questo è come lo uso

var elements = ['#1','#2','#3','#4'] 
var R1 = Math.floor(Math.random() * elements.length), 
E1 = elements.slice(R1,1) 
elements.remove(R1) 
var R2 = Math.floor(Math.random() * elements.length), 
E2 = elements.slice(R2,1) 
elements.remove(R2) 
var R3 = Math.floor(Math.random() * elements.length), 
E3 = elements.slice(R3,1) 
elements.remove(R3) 
var R4 = Math.floor(Math.random() * elements.length), 
E4 = elements.slice(R4,1) 

Il problema è la funzione di rimozione, non funziona quando si rimuove un oggetto in una posizione specifica, credo.

+1

Non hai scritto questo? Questa è esattamente la stessa implementazione di John Resig (il creatore di jQuery). – barndog

+0

è, ho trovato la prima parte qui mi dispiace per non averlo menzionato, sono nuovo qui – GdeBrock

+0

Cosa dovrebbe fare il tuo codice? – georg

risposta

4

Si sta utilizzando elements.slice(R3,1) errato. Secondo argomento non significa la lunghezza dell'array che si vuole ottenere, ma l'indice a base zero dell'elemento quando il metodo slice dovrebbe cessare. Quindi il tuo codice dice "Dammi elementi dall'indice R3 fino all'indice 1" e l'unica volta in cui funzionerà: elements.slice(0, 1). Se hai solo bisogno di ottenere un elemento - usa elements[R1]. Se hai bisogno di ottenere un array con un elemento puoi continuare a usare slice con elements.slice(R1, R1 + 1);

+0

che lo risolve, grazie! – GdeBrock

Problemi correlati