javascript - 基于类别的过滤数组

标签 javascript

有一组标记,每个标记属于一个或多个类别。

如何实现搜索/过滤器来检索所有包含 cat = X 的标记?

例如:

  • 所有标记均带有 cat = 9 ?
  • 所有带有 cat = 5 和 9 的标记?
Gmaps.map.markers = [
    {"id":9,"cat":"3, 5, 6","lat":"52.50","lng":"13.32"},
    {"id":11,"cat":"3","lat":"52.51","lng":"13.44"},
    {"id":12,"cat":"1, 2, 5","lat":"47.89","lng":"10.62"},
    {"id":13,"cat":"1, 2, 3, 4, 5","lat":"47.77","lng":"10.61"},
    {"id":15,"cat":"1, 6","lat":"40.60","lng":"-73.44"},
    {"id":16,"cat":"1, 3, 5, 9","lat":"51.89","lng":"17.16"},
    {"id":17,"cat":"9","lat":"52.37","lng":"9.73"}
];

最佳答案

类似这样的东西,使用正则表达式来查找在 cat 逗号分隔列表中是否找到了needleArray中的某些内容,如果是,则将该标记添加到返回的数组中。

function findMarkersContaining ( markers, needleArray ) {
   var matches = [];
   var markerLength = markers.length;
   var needleArrayLength = needleArray.length;
   for ( var i = 0; i < markerLength; i++ ) {
      for ( var e = 0; e < needleArrayLength; e++ ) {
         var regex = new RegExp( '(^| )' + needleArray[e] + '(,|$)' );
         if ( markers[i].cat.search( regex ) !== -1 ) {
            matches.push( markers[i] );
         }
      }
   }
   return matches;
}

关于javascript - 基于类别的过滤数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11886494/

相关文章:

javascript - 错误 : Can't set headers after they are sent if else statement

javascript - React Native - 从作为 prop 传递的函数调用方法

javascript - Json 数组对象访问

javascript - Javascript 中的闭包和 onclick

javascript - 不能在 QUnit 测试中使用从 http url 引用的 jQuery

javascript - 如何使用正则表达式在字符串中强制使用字符/特殊字符

javascript - jQuery:仅返回文本的一部分

javascript - 带有 npm 的客户端 Prism.js

javascript - 如何在 javascript 中获取对象的第一个、最后一个和其他值?

javascript - .placeAt() dojo/dijit 小部件的 onComplete 事件