如何使用集合作为谓词来过滤数组

时间:2017-04-06 09:27:57

标签: javascript arrays lodash

假设我有大量的数组(100K记录),可以说(sourceArray)。我有一个另一个数组(matchIds)的列表,我需要用它来过滤这个sourceArray。我如何用lodash实现这一目标?还是普通的JavaScript?

var sourceArray = [{
    "id": 123,
  },
  {
    "id": 456
  },
  {
    "id": 789
  },
  {
    "id": 111
  },
  {
    "id": 222
  },
  {
    "id": 333
  }];


var matchIds = [123, 222];

以下过滤器仅匹配单个项目

console.log(
      _.filter(sourceArray, function(arr){
         return arr.id === 123;
      })
    );

http://jsbin.com/fegipuwuwa/1/edit?html,js,console

我真正期望的是arr.id <..in..> matchIds

2 个答案:

答案 0 :(得分:3)

为什么不简单

var matchingArray = sourceArray.filter( function(item){
  return matchIds.indexOf(item.id) != -1 
});

这将返回与matchIds

匹配的所有项目

答案 1 :(得分:0)

您的谓词数据结构不是最佳的,并且通过增加大小会对整体性能产生负面影响。如果您首先将 @RequestMapping(value = "/") public MyResponse getResponse ( @RequestParam(value = "version") final ProjectVersion version ) { ...bla bla bla... } public enum ProjectVersion { VERSION_1 ("1.00") VERSION_2 ("2.00") private final String version; ProjectVersion ( String version ) { this.version = version; } @Override public String toString() { return this.version; } } 转换为哈希或地图,那将是最好的。一旦完成,剩下的就是O(n)。

[123, 222]