2011-04-28 21 views
5

Hai All, tengo una matriz con el nombre "ids" y algunos valores como ['0', '567', '956', '0', '34']. Ahora necesito eliminar los valores "0" de esta matriz. ids.remove ("0"); no funciona.
Por favor, hágamelo saber la solución.eliminar valores cero de la matriz con javascript

+3

Bueno, 'Array.prototype.remove' no existe, por lo que no puede trabajar;) –

Respuesta

13

Utilice el método de empalme en javascript. Pruebe esta función:

function removeElement(arrayName,arrayElement) 
{ 
    for(var i=0; i<arrayName.length;i++) 
    { 
     if(arrayName[i]==arrayElement) 
      arrayName.splice(i,1); 
     } 
    } 

parámetros son:

arrayName:-  Name of the array. 
arrayElement:- Element you want to remove from array 
+0

lo que es 1. Creo que necesito para usar "0" en lugar de "1" en mi caso ¿no? – vissu

+0

+1 aunque la comparación estricta podría ser mejor ... –

+0

@vissupepala: No. Lea la documentación: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/splice. Significa eliminar 1 elemento a partir del índice 'i'. –

2

A continuación código puede resolver su problema

for(var i=0; i<ids.length;i++) 
{ 
    if(ids[i]=='0') 
     ids.splice(i,1); 
    } 
+0

es simple y fácil de entender, y resuelve el problema también. gracias – vissu

+4

Eso fallará si la matriz tiene dos ceros consecutivos. –

6

Aquí es una función que elimina elementos de una matriz con un valor particular que ganó Fallo cuando dos elementos consecutivos tienen el mismo valor:

function removeElementsWithValue(arr, val) { 
    var i = arr.length; 
    while (i--) { 
     if (arr[i] === val) { 
      arr.splice(i, 1); 
     } 
    } 
    return arr; 
} 

var a = [1, 0, 0, 1]; 
removeElementsWithValue(a, 0); 
console.log(a); // [1, 1] 

En la mayoría de los navegadores (excepto IE < = 8), puede utilizar el método de objetos Array filter(), a pesar de ser consciente de que esto le hace regresar una nueva matriz:

a = a.filter(function(val) { 
    return val !== 0; 
}); 
+0

Podrías 'devolver val;' también –

+0

@BrianLeishman: si todos los miembros de tu matriz tienen la garantía de ser números, entonces sí, pero no es lo mismo en general: el uso de 'return val' filtrará cualquier valor falso, tal como 'falso' o una cadena vacía, en lugar de simplemente' 0'. –

+0

Sí, fue específicamente en este ejemplo, pensé que ya que tenía el '! ==' que tenía sentido aquí –

4

Para las matrices de tamaño no triviales, aún es mucho más rápido construir una nueva matriz que empalmar o filtrar.

var new_arr = [], 
tmp; 

for(var i=0, l=old_arr.length; i<l; i++) 
{ 
    tmp = old_arr[i]; 

    if(tmp !== '0') 
    { 
    new_arr.push(tmp); 
    } 
} 

¡Si hace un empalme, itere hacia atrás!

+0

+1 iterar hacia atrás – As3adTintin

8

Aquí hay una manera de hacerlo:

['0','567','956','0','34'].filter(Number) 
1
ids.filter(function(x) {return Number(x);}); 
Cuestiones relacionadas