假设我有大量的数组(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
答案 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]