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