我试图在下划线中创建filterObject
mixin。它不太顺利,有什么我想念的吗?
_.mixin({
filterObject: function(collection, fn){
var n = []
_.each(collection, function(value, key){
var decider = fn(value, key)
if(decider){
var temp = {}
temp[key] = value
n.push(temp)
}
})
return _.extend.apply(null, n);
}
})
var actionsFlags = {
"wallpaper": {
"images": true,
"queue": false,
},
"notify":{
"message": true,
"open": true,
"queue": false,
},
}
var requiredFlags = _.filterObject(actionsFlags, function(flags){
return _.filterObject(flags, function(flag){
return flag
})
})
我只需要一种方法让actionsFlags
对象只包含等于true
的道具。
答案 0 :(得分:2)
从版本1.7开始,_.pick函数可以使用一个可以用来代替filterObject的iteratee:
var requiredFlags = _.mapObject(actionsFlags, function(flags){
return _.pick(flags, function(flag){
return flag === true;
})
})
答案 1 :(得分:0)
这样做,只需要mapObject
然后filterObject
。
var requiredFlags = _.mapObject(actionsFlags, function(flags){
return _.filterObject(flags, function(flag){
return flag
})
})
答案 2 :(得分:0)
以下是使用开源项目jinqJs http://www.jinqJs.com
的方法var result = jinqJs().from(actionsFlags).select( function(row) {
var ret = {};
for(var o in row)
{
ret[o] = {};
for(var i in row[o])
{
if (row[o][i])
ret[o][i] = true;
}
}
return ret;
});