can I set a regexp for an object's method/property selector?

后端 未结 3 458
小鲜肉
小鲜肉 2021-01-07 03:35
var regxp = /[\\S]/; //any char, not sure if it\'s /.*/ or something else
var obj = {
 atr1: \"bla\"
}
var blahs = obj[regxp]; //returns atr1

I\'m

相关标签:
3条回答
  • 2021-01-07 03:45

    Yes, you can try to access a property of an object using a regular expression but no, it won't do what you want: it will convert the regex into a string and use that property name.

    The only way to find a property name on an object by matching a regular expression is a for ... in loop, like you mentioned. The performance should not be an issue if the object has only one property.

    function findPropertyNameByRegex(o, r) {
      for (var key in o) {
        if (key.match(r)) {
          return key;
        }
      }
      return undefined;
    };
    findPropertyNameByRegex(obj, regxp); // => 'atr1'
    
    0 讨论(0)
  • 2021-01-07 03:48

    your regex will match a single non-space character.

    for...in is a loop. it's slower than what exactly? have you benchmarked?

    if you want to look up properties using a regex, you'll have to do it in a loop.

    for(var k in obj) {
        if(regexp.match(k)) {
          // do whatever
        }
    }
    
    0 讨论(0)
  • 2021-01-07 04:03

    If you have only one property, you can be pretty sure for..in will not be slow.

    0 讨论(0)
提交回复
热议问题