![](/img/trans.png)
[英]Return key of object whose value is an object that contains a property that matches a condition
[英]return key value pair from object whose key matches certain condition with javascript and underscore
var obj = {
"M_18-24":413109,
"F_18-24":366159,
"F_25-34":265007,
"U_25-34":1214,
"U_35-44":732
}
我想返回一个具有键值对的对象,其键以“M”或“F”开头。 所以最终的对象看起来像
var obj = {
"M_18-24":413109,
"F_18-24":366159,
"F_25-34":265007
}
我尝试过_.filter(obj,function(v,k){return /^[MF]/.test(k)})之类的东西......
你可以试试
for (var prop in obj) { console.log(prop) }
它会为您提供相应的属性,然后您可以添加您的逻辑
if(prop.indexOf('M'))
这样就可以了:
function filte_obj_FM (inp)
{
var ret = {};
for ( var k in inp)
{
if ( k[0] == "M" || k[0] == "F" )
{
ret[k] = inp[k];
}
}
return ret;
}
在这里看到控制台输出(F12 + - >见控制台): http : //jsfiddle.net/vH3ym/2/
这应该工作:
var obj = {
"M_18-24":413109,
"F_18-24":366159,
"F_25-34":265007,
"U_25-34":1214,
"U_35-44":732
}
var filtered = {}
for(var key in obj) {
if(key[0] === "M" || key[0] === "F"){
filtered[key] = obj[key]
}
}
这次使用reduce的另一个版本:
//创建一个新的下划线函数,它将从传递给定谓词的对象返回属性
_.mixin({ filterProperties: function(obj, predicate){
return _.reduce(obj, function(memo, value, key){
if( predicate(key) ){
memo[key] = value;
}
return memo;
}, {});
}});
//在调用新函数时我们可以使用的几个谓词
function isMale(key){
return key[0] == 'M';
}
function isFemale(key){
return key[0] == 'F';
}
//最后得到我们想要的数据:
var males = _.filterProperties( obj, isMale );
var females = _.filterProperties( obj, isFemale );
这是我的解决方案:
_.filter(_.keys(obj), function(key) {
return key.match(/U/);
}).forEach(function(kv) {
delete obj[kv];
});
我想你们所有人都很好,我投票赞成他们。 谢谢!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.