2012-12-30 65 views
0

因此,我有兩個數組,我想從array2中刪除array1中未包含的所有元素(示例數組將使其更清晰)。從數組中刪除不匹配的元素

我想一個for循環和if語句可以做到這一點,但我認爲有一個更優雅的解決方案,如果有人有一個建議?

var elemsToKeep = [1, 3, 5, 6, 8]; 

var arr[0] = 'foo1'; 
var arr[1] = 'foo2'; // remove 
var arr[2] = 'foo3'; 
var arr[3] = 'foo4'; // remove 
var arr[4] = 'foo5'; 
var arr[5] = 'foo6'; 
var arr[6] = 'foo7'; // remove 
var arr[7] = 'foo8'; 
var arr[8] = 'foo9'; // remove 
var arr[9] = 'foo10'; // remove 
+3

你到目前爲止有什麼? – gdoron

回答

3

而不是試圖去除你不需要的值,而是創建一個只有你需要的值的新數組。提示:它涉及一個循環和Array.push

+0

這是一個很好的建議,這樣原始數組保持不變。 – undefined

2

也許filter(我第一次使用一個,所以我只是彈出,並提出了jsfiddle.net

注意更新,刪除任何非數字字符 - 這意味着1foo2將成爲12 - 讓我知道如果這是不是你想要的,那麼不同的正則表達式可以應用於

var elemsToKeep = [1, 3, 5, 6, 8]; 

var arr=[]; 
arr[0] = 'one1'; 
arr[1] = 'two2'; // remove 
arr[2] = 'three3'; 
arr[3] = 'four4'; // remove 
arr[4] = 'five5'; 
arr[5] = 'six6'; 
arr[6] = 'seven7'; // remove 
arr[7] = 'eight8'; 
arr[8] = 'nine9'; // remove 
arr[9] = 'ten0'; // remove 

function keep(element, index, array) { 
    var num = parseInt(element.replace(/[^\d]/g,''),10); // any char! 
    return elemsToKeep.indexOf(num) !=-1; 
} 

var filtered = arr.filter(keep); 
alert(filtered)​ 
+0

抱歉,雙重答案。我在我的手機上輸入了它,出了點問題:) – asgoth

+0

非常感謝您的回答。但是,只有當元素包含foo *時,您的代碼纔有效。如何改變它以適應元素中的任何內容? – holyredbeard

+0

查看更新。假設xxxN,其中xxx可以是任何非數字字符 – mplungjan

1

你可以使用下劃線的_reject功能:

var filtered = _reject(arr2, function(element, index) { 
    return elementsToKeep.indexOf(index +1) == -1; 
});