从其键与javascript和下划线的特定条件匹配的对象返回键值对

从其键与javascript和下划线的特定条件匹配的对象返回键值对,javascript,map,filter,underscore.js,Javascript,Map,Filter,Underscore.js,我想返回一个具有键值对的对象,其键值以“M”或“F”开头。最后一个物体看起来像 var obj = { "M_18-24":413109, "F_18-24":366159, "F_25-34":265007, "U_25-34":1214, "U_35-44":732 } 我已经尝试过像j.filter(obj,function(v,k){return/^[MF]/.test(k)})这样的东西。你可以试试 var obj = { "M_18-24":413109, "F_18-24":3

我想返回一个具有键值对的对象,其键值以“M”或“F”开头。最后一个物体看起来像

var obj = {
"M_18-24":413109,
"F_18-24":366159,
"F_25-34":265007,
"U_25-34":1214,
"U_35-44":732
} 
我已经尝试过像j.filter(obj,function(v,k){return/^[MF]/.test(k)})这样的东西。

你可以试试

var obj = {
"M_18-24":413109,
"F_18-24":366159,
"F_25-34":265007
} 
它将为您提供相应的属性,然后您可以添加如下逻辑

for (var prop in obj) { console.log(prop) }
你可以试试

var obj = {
"M_18-24":413109,
"F_18-24":366159,
"F_25-34":265007
} 
它将为您提供相应的属性,然后您可以添加如下逻辑

for (var prop in obj) { console.log(prop) }

这将实现以下目的:

if(prop.indexOf('M'))

请参见此处的控制台输出(F12+->请参见控制台):

这将实现以下功能:

if(prop.indexOf('M'))
请参见此处的控制台输出(F12+->请参见控制台):

这应该可以:

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;
}
这应该起作用:

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;
}
以下是我的解决方案:

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]
  }
}
我认为你们都很好,我投票支持了他们。谢谢

以下是我的解决方案:

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

//创建一个新的下划线函数,该函数将从传递给定谓词的对象返回属性

_.filter(_.keys(obj), function(key) {
    return key.match(/U/);
}).forEach(function(kv) {
   delete obj[kv];
});
//调用新函数时可以使用的两个谓词

_.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';
}

这次使用的另一个版本是reduce

//创建一个新的下划线函数,该函数将从传递给定谓词的对象返回属性

_.filter(_.keys(obj), function(key) {
    return key.match(/U/);
}).forEach(function(kv) {
   delete obj[kv];
});
//调用新函数时可以使用的两个谓词

_.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';
}

我想你的意思是
prop.indexOf('M')
。我想你的意思是
prop.indexOf('M')
。注意:这将需要-这是一个非常整洁的JS添加。注意:这将需要-这是一个非常整洁的JS添加。