繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM