2010-11-29 16 views
6

Je veux supprimer tous les deuxième et troisième éléments d'un tableau en Javascript.Comment supprimer tous les deuxième et troisième éléments d'un tableau en Javascript?

Mon tableau ressemble à ceci:

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

Maintenant, je veux supprimer tous les deuxième et troisième élément. Le résultat ressemblerait à ceci:

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

J'ai essayé d'utiliser une boucle for et épissures:

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

Bien sûr, cela retourne un tableau vide parce que les éléments sont retirés alors que la boucle est toujours exécutée . Comment puis-je faire cela correctement?

Merci.

+0

Il y a quelques mauvaises choses, en particulier que c'est l'équivalent de courir 'while (fruits)', qui fonctionnera aussi longtemps que les fruits vrai, au lieu de simplement passer par le tableau une fois. – Yahel

Répondre

12

Vous pouvez aborder ce sous un angle différent et push() la valeur que vous ne voulez pas supprimés dans un autre tableau:

var firstFruits = [] 

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

Cette approche ne peut pas être aussi laconique que l'utilisation splice(), mais je pense que vous voyez un gain en termes de lisibilité.

+0

Je préférerais le premier au cours de la seconde, car le second produira un tableau comme '[" Banana "," "," "," Orange "," "," "," Apple "]' – Robert

+0

@Robert, vous avez absolument raison. Je suis sûr que ce n'est pas la fonctionnalité que l'OP désire. Merci, je vais mettre à jour ma réponse pour inclure le premier. – McStretch

+0

Wow, c'est facile. Merci beaucoup. :-) – Bob

0

Avez-vous envisagé de simplement copier les premier, quatrième et septième éléments d'un nouveau tableau? Ce n'est pas très efficace sur le plan de la mémoire, mais ça marchera toujours très bien.

1

Essayez une boucle à travers le tableau dans l'ordre inverse

0

Vous aurez envie de se déplacer dans le tableau arrière, puis si i % 2 == 0 || i%3 == 0 puis Splice l'élément du tableau

9

Cela fonctionne pour moi.

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 

Voici une démo qui illustre un peu mieux: http://jsfiddle.net/RaRR7/

+0

C'est aussi une très bonne idée, merci. – Bob

1

Vous pouvez utiliser le filtre:

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

Retours:

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

J'aime cette approche en utilisant un filtre. Mais n'est-ce pas '(i + 1)% 3! = 0 && (i + 1)% 2! = 0' la même chose que' i% 3 === 0' dans ce cas? Je pense que ce dernier est beaucoup plus simple. – modulitos

+0

Oui, c'est vrai. Je vais mettre à jour. –