在JavaScript中对多维数组使用过滤器方法

时间:2016-06-30 15:54:32

标签: javascript arrays multidimensional-array

有一个多维数组,我想过滤它,所以只有一个单词以一个以下划线结尾的单词' _'离开了。我已经使用循环完成了这个任务。

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)你可以做类似的事情,但我不知道如何过滤数组内的数组。我在另一个过滤方法中使用过滤方法的所有尝试都失败了。

2 个答案:

答案 0 :(得分: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 :(得分:0)

你似乎想要

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