2010-10-26 18 views
47

Estoy tratando de vaciar una matriz que contiene mis coordenadas dibujadas cuando se presiona un botón "borrar".¿La función array.clear() de JavaScript no es una función?

Cuando llamo al drawnDivs.clear(), me sale un error que no es una función. drawnDivs es ciertamente una matriz, y tengo Firebugconsole.log s imprimiendo cosas. Es hosted here.

+1

Fuera de interés, ¿de dónde sacaste la idea de usar clear()? No parece ser una parte de Javascript. – thomasrutter

+0

Ah se ve como visual basic :) – thomasrutter

+0

una búsqueda en google me consiguió aquí: http://www.roseindia.net/java/javascript-array/javascript-array-clear.shtml –

Respuesta

71

No, no lo es. Pero drawnDivs.length = 0 debería funcionar.

+1

Esto funcionará si es una matriz verdadera, y no solo un objeto similar a una matriz. – thomasrutter

+3

@thomasrutter. Es cierto pero conservará las referencias y cualquier otra propiedad y función de adición definida en la matriz. – jordanbtucker

+0

sí, esta sigue siendo la mejor solución en general. Y para ser honesto, todavía funcionaría en objetos tipo array, simplemente no liberaría a ninguno de los miembros existentes de la memoria de inmediato. Entonces solo un punto menor realmente. – thomasrutter

8

drawnDivs = [];

+25

Tenga cuidado, ya que esto no modificará otras referencias al objeto. –

3

Se contestó en la pregunta de desbordamiento de pila How do I empty an array in JavaScript?.

Dos ejemplos de la respuesta:

var A = ['some', 'values', 'here']; 

//Method 1 

//(This was my original answer to the question) 

A = []; 




// Method 2 (as suggested by Matthew Crumley) 

A.length = 0 

Y here is a nice write up en estos dos métodos por el Dr. Axel Rauschmayer.

+0

La respuesta elegida en el enlace referido no es la solución correcta ya que no borra las variables que hacen referencia a la matriz que se borra. La respuesta correcta en ese hilo es http://stackoverflow.com/a/8134354/206687 –

+0

Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. – Claies

+0

@AndrewCounts hecho. Gracias por el empujoncito. – subhaze

0

Puede utilizar alternativamente la biblioteca Prototype y luego, usar el método clear() de Prototype.

+1

Podría ser una forma alternativa, pero creo que hay muchas maneras más fáciles sin el uso de bibliotecas para borrar una matriz. –

+2

Sí, eso funcionaría, pero usar una almádena es matar una mosca. –

2

una forma optimizada para hacerlo es:

while (arr.pop()) {} 

Ver http://jsperf.com/kbk-clear-array/2.

+1

Esto falla si la matriz tiene ranuras vacías. Esto debería hacerlo: 'while (arr.length> 0) { arr.pop(); } ' – Geoff

+0

** No, esto debería ser: **' while (arr.length) {arr.pop(); } ' –