2015-09-08 22 views
0

我們可以從陣列濾除一個單一的值與filter功能是這樣的:如何使用JavaScript中的過濾器從多維數組中刪除多個元素?

var possi = [ 
     ['1','2','3'], ['4','5','6'], ['7','8','9'], ['1','4','7'], 
     ['2','5','8'], ['3','6','9'], ['1','5','9'], ['3','5','7'] 
    ]; 

var remove = '1'; 

possi = possi.filter(function(p){ 
    return p.indexOf(remove) === -1; 
}); 

結果是:

[ [ '4', '5', '6' ], 
    [ '7', '8', '9' ], 
    [ '2', '5', '8' ], 
    [ '3', '6', '9' ], 
    [ '3', '5', '7' ] ] 

但是,如果我們有多個元件,以刪除,即,如果我們有:

var remove = ['1', '6']; 

我們如何檢查是否在possi存在的每個remove元素,並篩選出墊子ching possi元素?

另外,在這種情況下,還有其他的功能,如mapreduce是更好的解決方案嗎?

+0

用「for循環」? – Lauromine

回答

4

如果你想刪除possi匹配陣列remove的任何元素,所有陣列,您可以用Array.prototype.some()結合Array.prototype.filter()

var possi = [ 
 
    ['1', '2', '3'], 
 
    ['4', '5', '6'], 
 
    ['7', '8', '9'], 
 
    ['1', '4', '7'], 
 
    ['2', '5', '8'], 
 
    ['3', '6', '9'], 
 
    ['1', '5', '9'], 
 
    ['3', '5', '7'] 
 
]; 
 

 
var remove = ['1', '6']; 
 

 
possi = possi.filter(function(p) { 
 
    return !p.some(function(v) { 
 
    return remove.indexOf(v) !== -1; 
 
    }); 
 
}); 
 

 
console.log(possi);

結果是:

[ 
    ['7', '8', '9'], 
    ['2', '5', '8'], 
    ['3', '5', '7'] 
] 
+2

而且,要展開,如果要刪除具有'remove'中的所有元素(1和6,而不是1或6)的數組,您可以使用'.every'而不是'some'。 – pawel

相關問題