过滤下划线中的对象
Filtering objects in underscore
我正在尝试在下划线中创建 filterObject
混入。进展不太顺利,是不是我遗漏了什么?
_.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
.
的道具
这行得通,只需 mapObject
然后 filterObject
。
var requiredFlags = _.mapObject(actionsFlags, function(flags){
return _.filterObject(flags, function(flag){
return flag
})
})
下面是如何使用开源项目 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;
});
从版本 1.7 开始,_.pick 函数可以接受一个迭代器,它可以用来代替 filterObject:
var requiredFlags = _.mapObject(actionsFlags, function(flags){
return _.pick(flags, function(flag){
return flag === true;
})
})
我正在尝试在下划线中创建 filterObject
混入。进展不太顺利,是不是我遗漏了什么?
_.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
.
这行得通,只需 mapObject
然后 filterObject
。
var requiredFlags = _.mapObject(actionsFlags, function(flags){
return _.filterObject(flags, function(flag){
return flag
})
})
下面是如何使用开源项目 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;
});
从版本 1.7 开始,_.pick 函数可以接受一个迭代器,它可以用来代替 filterObject:
var requiredFlags = _.mapObject(actionsFlags, function(flags){
return _.pick(flags, function(flag){
return flag === true;
})
})