bsr*_*bsr 23 javascript underscore.js
我试图基于另一个过滤对象数组.共同属性id id.我不确定过滤器+每个是最好的方法或映射减少.无论如何,下面的代码不能像out空列表一样工作.
var aaa = [
{name: "AAA", id: 845},
{name: "BBB", id: 839},
{name: "CCC", id: 854}
];
var bbb = [
{id: 839},
{id: 854}
];
var out = _.filter(aaa, function(val){
return _.each(this, function(val2){
return val['id'] === val2['id']
});
}, bbb);
Run Code Online (Sandbox Code Playgroud)
kay*_*kay 39
只需创建有效ID的"集合"并使用"set"进行过滤:
var aaa = [
{name: "AAA", id: 845},
{name: "BBB", id: 839},
{name: "CCC", id: 854}
];
var bbb = [
{id: 839},
{id: 854}
];
var ids = {};
_.each(bbb, function (bb) { ids[bb.id] = true; });
var out = _.filter(aaa, function (val) {
return ids[val.id];
}, bbb);
Run Code Online (Sandbox Code Playgroud)
填充ids速度很快,它在n*摊销的 O(1)中,即O(n).同样适用于过滤.
如果each(…)在内循环中使用,则将具有O(n²).对于更大的数据集,这将变得非常慢.此外,额外的嵌套使得代码乍一看更难以阅读/理解.
看到该代码已截断:http://jsfiddle.net/SMtX5/
小智 19
你可以_.find用来过滤:
_.filter(aaa, function(a){
return _.find(bbb, function(b){
return b.id === a.id;
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31179 次 |
| 最近记录: |