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)})......
答案 0 :(得分:2)
这样可以解决问题:
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/
答案 1 :(得分:1)
你可以尝试
for (var prop in obj) { console.log(prop) }
它会为您提供相应的属性,然后您可以添加逻辑,如
if(prop.indexOf('M'))
答案 2 :(得分:1)
这应该有效:
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]
}
}
答案 3 :(得分:1)
这次使用 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 );
答案 4 :(得分:0)
这是我的解决方案:
_.filter(_.keys(obj), function(key) {
return key.match(/U/);
}).forEach(function(kv) {
delete obj[kv];
});
我认为你们所有人都很好,我把他们投了票。谢谢!