Javascript 通过数组中的数组循环,如果特定数组有特定的字,则获取该数组

Javascript 通过数组中的数组循环,如果特定数组有特定的字,则获取该数组,javascript,arrays,loops,Javascript,Arrays,Loops,我正在尝试创建一个搜索函数,其中传递一个搜索词(例如,“Food”或“Gym”),该函数将在数组中的数组中循环,如果在嵌套数组中找到该词,则会将该确切数组推送到过滤数组中。然后我可以向用户显示 我试过寻找不同的解决方案,但没有成功。这就是我目前所拥有的 // Filter list with search keyword function filter(keyword,list) { // placeholder for matches var filtered

我正在尝试创建一个搜索函数,其中传递一个搜索词(例如,“Food”或“Gym”),该函数将在数组中的数组中循环,如果在嵌套数组中找到该词,则会将该确切数组推送到过滤数组中。然后我可以向用户显示

我试过寻找不同的解决方案,但没有成功。这就是我目前所拥有的

 // Filter list with search keyword
    function filter(keyword,list) {
      // placeholder for matches
      var filtered = [];
      // loop through list
      for (var i = 0; i < list.length; i++) {
        var store = list[i];

        // loop through each individual array/store in list
        for (var y = 0; y < store.length; y++) {
        // if match keyword
        if(store[y].match(keyword)){
          // push that store into filtered array
                filtered.push(store);
          }

      else{
        alert('cannot find');
      };    
     };
  };    
};     



var list=[
    ["Mikes Gym",
    "21 Rosenberg Road",
    "Heidelberg",
    "Come get your ice",
    "5",
    ["onsequat. Phasellus diam .", "malesuada in. Integer eget molestie mi. Etiam a"],
    "9104-1059",
    "Gym"
    ],
      ["Mikes Cafe",
    "21 Rosenberg Road",
    "Heidelberg",
    "Come get your ice",
    "5",
    ["onsequat. Phasellus diam .", "malesuada in. Integer eget molestie mi. Etiam a"],
    "9104-1059",
     "Food"
    ],
      ["Mikes Hairdresser",
    "21 Rosenberg Road",
    "Heidelberg",
    "Come get your ice",
    "5",
    ["onsequat. Phasellus diam .", "malesuada in. Integer eget molestie mi. Etiam a"],
    "9104-1059",
     "Hairdresser"
    ],
      ["Mikes Nightclub",
    "21 Rosenberg Road",
    "Heidelberg",
    "Come get your ice",
    "5",
    ["onsequat. Phasellus diam .", "malesuada in. Integer eget molestie mi. Etiam a"],
    "9104-1059",
     "Club"
    ],
      ["Mikes Groceries",
    "21 Rosenberg Road",
    "Heidelberg",
    "Come get your ice",
    "5",
    ["onsequat. Phasellus diam .", "malesuada in. Integer eget molestie mi. Etiam a"],
    "9104-1059",
     "Shop"
    ]
  ];

filter("Food",list)
//使用搜索关键字筛选列表
函数过滤器(关键字,列表){
//匹配的占位符
var筛选=[];
//循环列表
对于(变量i=0;i
你的问题不太清楚。这是你需要的吗?它返回包含匹配单词的最近数组。 我使用RegExp-test来查找匹配的单词,如果您需要查找精确的单词,请使用===代替,因为测试的性能不高。我之所以把它放在这里,是因为你可以用它编写一些更通用的随机正则表达式

function wordFilter(keyword, list) {

  var filter = [];

  recursiveFilter(keyword, list);

  function recursiveFilter(keyword, list) {
      //Loop if list is array, otherwise test if it matches the keyword
      if(Array.isArray(list)) {

        for(var i = 0; i < list.length; i++) {

            if(recursiveFilter(keyword, list[i])) {
                //This unlikely to return true, I just put it there to make sure
                if(Array.isArray(list[i])){
                    filter.push(list[i]);
                } else {
                    filter.push(list);
                }
                break;
            }
        }
      } else {
        var reg = new RegExp(keyword);
        return reg.test(list);
      }
   }
   return filter;
}
函数wordFilter(关键字,列表){
var过滤器=[];
递归过滤器(关键字,列表);
函数递归过滤器(关键字,列表){
//如果列表是数组,则循环,否则测试它是否匹配关键字
if(Array.isArray(列表)){
对于(变量i=0;i
//使用搜索关键字筛选列表
函数过滤器(关键字,列表){
//匹配的占位符
var筛选=[];
//循环列表
对于(变量i=0;i
作为我评论的后续内容,下面是一个示例代码,它使用
indexOf()
而不是
match()
,以了解字符串是否包含子字符串。我还将使用
filter()
join()
而不是两个for循环

var findIn = function findIn(needle, haystack) {
        return haystack.filter(function(el) {
            return el.join(' ').indexOf(needle) > -1;
        });
    }
  , list = ["Mikes Gym", "21 Rosenberg Road", "Heidelberg", "Come get your ice", "5", ["onsequat. Phasellus diam .", "malesuada in. Integer eget molestie mi. Etiam a"], "9104-1059", "Gym" ], ["Mikes Cafe", "21 Rosenberg Road", "Heidelberg", "Come get your ice", "5", ["onsequat. Phasellus diam .", "malesuada in. Integer eget molestie mi. Etiam a"], "9104-1059", "Food" ], ["Mikes Hairdresser", "21 Rosenberg Road", "Heidelberg", "Come get your ice", "5", ["onsequat. Phasellus diam .", "malesuada in. Integer eget molestie mi. Etiam a"], "9104-1059", "Hairdresser" ], ["Mikes Nightclub", "21 Rosenberg Road", "Heidelberg", "Come get your ice", "5", ["onsequat. Phasellus diam .", "malesuada in. Integer eget molestie mi. Etiam a"], "9104-1059", "Club" ], ["Mikes Groceries", "21 Rosenberg Road", "Heidelberg", "Come get your ice", "5", ["onsequat. Phasellus diam .", "malesuada in. Integer eget molestie mi. Etiam a"], "9104-1059", "Shop" ] ]
  ;

console.log(findIn("Food",list));

条件部分,
返回el.join(“”).indexOf(针)>-1,可能会根据您的需要进行调整,只使用小写匹配、正则表达式或任何其他将返回布尔值的方法。

我认为您的主要问题在于使用
.match()
。它应该与正则表达式一起使用。你确定你用得对吗?此外,我更愿意为那些场景使用map/filter/reduce函数,而不是for循环。对!我没有想到过滤器和地图。对不起,我还是新手,这是我第一次从零开始创作。这正是我所需要的。非常感谢你。我现在将把它放到调试器中,看看到底发生了什么。(非常感谢。)如果符合您的需要,请将此标记为正确答案。
     // Filter list with search keyword
    function filter(keyword,list) {
      // placeholder for matches
      var filtered = [];
      // loop through list
      for (var i = 0; i < list.length; i++) {
      var store=list[i];
        for (var y = 0; y < store.length; y++) {
        // if match keyword
        if(store[y]==keyword){
          // push that store into filtered array
                filtered.push(list[i]);
          }
      } 
    }
   return filtered;
    }    `
var findIn = function findIn(needle, haystack) {
        return haystack.filter(function(el) {
            return el.join(' ').indexOf(needle) > -1;
        });
    }
  , list = ["Mikes Gym", "21 Rosenberg Road", "Heidelberg", "Come get your ice", "5", ["onsequat. Phasellus diam .", "malesuada in. Integer eget molestie mi. Etiam a"], "9104-1059", "Gym" ], ["Mikes Cafe", "21 Rosenberg Road", "Heidelberg", "Come get your ice", "5", ["onsequat. Phasellus diam .", "malesuada in. Integer eget molestie mi. Etiam a"], "9104-1059", "Food" ], ["Mikes Hairdresser", "21 Rosenberg Road", "Heidelberg", "Come get your ice", "5", ["onsequat. Phasellus diam .", "malesuada in. Integer eget molestie mi. Etiam a"], "9104-1059", "Hairdresser" ], ["Mikes Nightclub", "21 Rosenberg Road", "Heidelberg", "Come get your ice", "5", ["onsequat. Phasellus diam .", "malesuada in. Integer eget molestie mi. Etiam a"], "9104-1059", "Club" ], ["Mikes Groceries", "21 Rosenberg Road", "Heidelberg", "Come get your ice", "5", ["onsequat. Phasellus diam .", "malesuada in. Integer eget molestie mi. Etiam a"], "9104-1059", "Shop" ] ]
  ;

console.log(findIn("Food",list));