2014-06-13 4 views
0

Je dois supprimer tous les éléments d'un tableau qui ne contiennent pas "IN" en majuscules exactement comme cela. J'ai pensé à faire cela en traversant le tableau avec une boucle for et en écrivant toutes les valeurs contenant IN dans un autre tableau.Supprimer tous les éléments du tableau de chaînes qui ne contiennent pas "IN"

Y a-t-il un moyen de le faire sans écrire dans une nouvelle matrice et supprimer simplement les éléments qui ne correspondent pas à la matrice actuelle?

Voici le code de la façon dont je comptais le faire:

arrTwo = []; 

for(var i = 0; i<arr.length; i++){ 
    if(arr[i].indexOf('IN') > -1) arrTwo.push[arr[i]]; 
} 
+0

Il est [filtre] fonction (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) définie pour l'objet de réseau que vous pouvez utiliser. Il va créer un nouveau tableau filtré si – Andrei

Répondre

4

Vous pouvez utiliser la méthode ES5 filter:

arr = arr.filter(function(s){ 
    return ~s.indexOf("IN"); 
}); 

Et en utilisant ES6 arrow functions, il peut être simplifié à:

arr = arr.filter(s=>~s.indexOf("IN")); 
+0

C'est incroyable. Et si je voulais faire si elle contient IN ou NN? – MrGuru

+0

@MrGuru Ensuite, vous pouvez utiliser '~ s.indexOf (" IN ") || ~ s.indexOf ("NN") '; ou expressions régulières: '/ [IN] N/.test (str)' ou '/IN|NN/.test (str)' – Oriol

0

je le ferais en utilisant la méthode splice():

var testArray = [ 'this one contains IN', 'this one does not' ]; 

function filterArray (arr) { 
    var i = arr.length; 
    //-- Loop through the array in reverse order since we are modifying the array. 
    while (i--) { 
     if (arr[i].indexOf('IN') < 0) { 
      //-- splice will remove the non-matching element 
      arr.splice(i, 1); 
     } 
    } 
} 

filterArray(testArray); 

document.body.innerText = JSON.stringify(testArray); 

jsFiddle: http://jsfiddle.net/5DW8L/1/

Questions connexes