2010-11-29 21 views
6

Quiero eliminar cada segundo y tercer elemento de una matriz en Javascript.¿Cómo eliminar cada segundo y tercer elemento de una matriz en Javascript?

Mi matriz se ve así:

var fruits = ["Banana", "yellow", "23", "Orange", "orange", "12", "Apple", "green", "10"]; 

Ahora quiero eliminar cada segundo y tercer elemento. El resultado sería el siguiente:

["Banana", "Orange", "Apple"] 

He intentado utilizar un para-loop y empalme:

for (var i = 0; fruits.length; i = i+3) { 
    fruits.splice(i+1,0); 
    fruits.splice(i+2,0); 
}; 

Por supuesto, esto devuelve una matriz vacío porque los elementos se eliminan mientras que el bucle todavía se ejecuta . ¿Cómo puedo hacer esto correctamente?

Gracias.

+0

hay un par de cosas mal, sobre todo que esto es el equivalente de ejecutar 'while (fruits)', que se ejecutará mientras las frutas se evalúen como cierto, en lugar de simplemente pasar por la matriz una vez. – Yahel

Respuesta

12

Usted puede acercarse a esto desde un ángulo diferente y push() el valor que no desea eliminado en otra matriz:

var firstFruits = [] 

for (var i = 0; i < fruits.length; i = i+3) { 
    firstFruits.push(fruits[i]); 
}; 

Este enfoque puede no ser tan escueto como el uso de splice(), pero creo que se ve ganancia en términos de facilidad de lectura.

+0

Prefiero la primera que la segunda, ya que la segunda producirá una matriz como '[" Banana "," "," "," Naranja "," "," "," Apple "]' – Robert

+0

@Robert, Estás absolutamente en lo correcto. Estoy seguro de que esa no es la funcionalidad que OP desea. Gracias, actualizaré mi respuesta para incluir solo la primera. – McStretch

+0

Guau, eso es fácil. Muchas gracias. :-) – Bob

0

¿Ha considerado simplemente copiar los elementos primero, cuarto y séptimo en una nueva matriz? No es muy eficiente desde el punto de vista de la memoria, pero funcionará bien.

1

Try bucle a través de la matriz en orden inverso

0

usted querrá moverse a través de la matriz hacia atrás, entonces si i % 2 == 0 || i%3 == 0 luego empalmar el elemento de la matriz

9

Esto funciona para mí.

var fruits = ["Banana", "yellow", "23", "Orange", "orange", "12", "Apple", "green", "10","Pear","something","else"]; 

for(var i = 0; i < fruits.length; i++) { 
    fruits.splice(i+1,2); 
} 

//fruits = Banana,Orange,Apple,Pear 

He aquí una demostración que ilustra un poco mejor: http://jsfiddle.net/RaRR7/

+0

Esa también es una muy buena idea, gracias. – Bob

1

Usted podría utilizar filtro:

var filtered = [ 
    "Banana", 
    "yellow", 
    "23", 
    "Orange", 
    "orange", 
    "12", 
    "Apple", 
    "green", 
    "10" 
].filter(function(_, i) { 
    return i % 3 === 0; 
}) 

Devuelve:

["Banana", "Orange", "Apple"] 
+0

Me gusta este enfoque usando filtro. Pero no es '(i + 1)% 3! = 0 && (i + 1)% 2! = 0' lo mismo que' i% 3 === 0' en este caso? Creo que este último es mucho más simple. – modulitos

+0

sí, eso es cierto. Voy a actualizar. –

Cuestiones relacionadas