2014-06-13 72 views
0

我需要刪除數組中不包含「IN」的所有元素,完全如此。刪除不包含「IN」的字符串數組中的所有元素

我怎麼想這樣做是用for循環遍歷數組,並將所有包含IN的值寫入另一個數組。

有沒有辦法我可以做到這一點,而不寫入新的數組,只是從當前數組中刪除那些不匹配的項目?

這裏是我是如何打算做它的代碼:

arrTwo = []; 

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

有用於陣列對象定義[過濾](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter)函數你可以使用它。它會創建一個新的過濾數組,雖然 – Andrei

回答

4

您可以使用ES5 filter方法:

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

而且使用ES6 arrow functions,它可以簡化爲:

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

這太神奇了。如果我想要如果它包含IN或NN,該怎麼辦? – MrGuru

+0

@MrGuru然後你可以使用'〜s.indexOf(「IN」)|| 〜s.indexOf( 「NN」)';或正則表達式:'/ [IN] N/.test(str)'或'/IN|NN/.test(str)' – Oriol

0

我會用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/

相關問題