2017-08-01 23 views
1

考虑对象:的javascript:最短代码中查找对象键与模式匹配

var myObj = { 
    hugeKey1: 'xxx', 
    hugeKey2: 'xxx', 
    hugeKey3: 'xxx', 
    hugeKey4: 'xxx', 
    prettyKey1: 'Only one' 
}; 

以下是获取所有键的列表与模式hugeKey代码:

var filteredKeySet = _.filter(
    Object.keys(data), 
    function (key) { 
     if (key.match(/hugeKey/i)) { 
      return true; 
     } 
    } 
); 

只有一个名为PrettyKey1的密钥,但最后的数字是动态的 - 也可能是PrettyKey2

找到模式匹配的第一个键的最短代码是什么?

某种看似Object.keys(myObj).findFirstMatch(/PrettyKey/i);

回答

1

除了以前的答案,如果你需要经常进行这样的操作和目标对象也在变化,你可以写如下的效用功能:

function matchBy(pattern) { 
    return obj => Object.keys(obj).find(k => k.match(pattern)); 
} 

function findBy(pattern) { 
    return obj => Object.keys(obj).find(k => k.includes(pattern)); 
} 

然后用它们为:

var match = matchBy(/prettyKey/i); 
var find = findBy("prettyKey"); 

.... 
console.log(match(myObj)); 
console.log(find(myObj)); 
0

好发布后如此发现了一个可能的答案几乎立刻:

Object.keys(myObj).findIndex(x=>x.match(/PrettyKey/i))

只需要使用按键上的=>基于索引的搜索。

不知道是否有更快的方式通过lodash做到这一点。

1

根据您的要求,这可能是你需要的东西:

const firstMatchedKeyNameInObject = Object.keys(myObj).find(keyName => keyName.includes('prettyKey')); 
+0

谢谢 - 匹配的项名称是要求 – BabyGroot

+0

很高兴听到它的工作。我会调整我的答案,所以它不包括P.S.因为这只是为了澄清你的意图。 – Denialos

1

function callback(elm){ 
    if(elm.match(/prettyKey/i)) return true; 
} 
Object.keys(myObj).findIndex(callback); 

Object.keys(myObj).findIndex(key=>key.match(/PrettyKey/i)) 

Object.keys(myObj).findIndex(key=>key.includes('prettyKey'))