2016-06-30 54 views
1

有一個多維數組,我想過濾它,所以只剩下一個單詞以下劃線'_'結尾的數組。我已經使用循環完成了這項任務。在JavaScript中的多維數組上使用過濾器方法

function searchNames(logins){ 
    var arr = logins; 
    var reg = /\w+_\b/; 
    var newAr = []; 

    for(var i = 0; i < arr.length; i++) { 
    for(var x = 0; x < arr[i].length; x++){ 
     if(arr[i][x].match(reg)){ 
     newAr.push(arr[i]) 
     } 
    } 

    } 
    return newAr; 
} 

有沒有辦法做同樣的使用 Array.prototype.filter()方法。根據MDN參考文獻(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter),你可以做類似的事情,但我不知道如何過濾陣列內的數組。我在另一個過濾器方法中使用過濾器方法的所有嘗試均失敗。

+0

何不當你得到答案時,你甚至會發表評論嗎? –

+0

對不起,這個網站的新手 – Alex

回答

1

只需通過過濾方法的有用塊:

array = [["hello_","cat"],["dog","dog"]]; 

arrayTest = function(arr){ 
    resp = false; 
    arr.forEach(function(str){ 
     if(str.slice(-1) === "_") resp = true; 
    }); 
    return resp; 
} 

result = array.filter(arrayTest); 

,或者如果你真的嫁給你的正則表達式:

array = [["hello_","cat"],["dog","dog"]]; 
regex = /\w+_\b/; 

arrayTest = function(arr){ 
    resp = false; 
    arr.forEach(function(str){ 
     if(str.match(regex)) resp = true; 
    }); 
    return resp; 
} 

result = array.filter(arrayTest); 
+1

這個工作,謝謝,我完全忘了forEach方法! – Alex

+0

手提袋手提袋手提袋。 –

0

你似乎想

var newArr = arr.filter(subArr => subArr.some(e=>/\w+_\b/.test(e)));