簡體   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