下划线,过滤掉不必要的对象

时间:2015-03-20 15:11:32

标签: javascript underscore.js

所以我有一大堆物体需要变成一个小物体。

它有50-60个对象,我需要过滤到一个新的对象数组中,只有3个。

所以它看起来像

myOb = {{"ob1": 1},{"ob2": 1},{"ob3": 1},{"ob4": 1},{"ob5": 1}..... 

等等

我需要把它变成一个obj,只有ob1,ob2和ob3在里面 -

 myOb ={{"ob1": 1},{"ob2": 1},{"ob3": 1}}

类似于 -

myOb = _.filter(myOb, function(object){
          return ob1, ob2, ob3 (??)
   });

不确定如何使用下划线解决此问题(或者如果没有必要使用下划线,则只是简单的javascript)。谢谢!

2 个答案:

答案 0 :(得分:3)

只需检查对象中是否存在该属性:

myOb = _.filter(myOb, function(obj){
    return 'ob1' in obj || 'ob2' in obj || 'ob3' in obj;
});

可替换地:

var keep = {obj1: true, obj2: true, obj3: true};
myOb = _.filter(myOb, function(obj){
    return keep[_.keys(obj)[0]];
});

Moaaar underscore.js:

var keep = ['obj1', 'obj2', 'obj2']; 
myOb = _.filter(myOb, function(obj){
    return _.some(keep, function(k) { return _.has(obj, k);});
});

没有下划线:js:

var keep = ['obj1', 'obj2', 'obj2']; 
myOb = myOb.filter(function(obj){
    return keep.some(function(k) { return k in obj; });
});

答案 1 :(得分:1)