最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

regex - Javascript :: How to get keys of associative array to array variable? - Stack Overflow

programmeradmin9浏览0评论

Let's have an associative array like this:

var aArray = {};
aArray.id = 'test';
aArray['x1'] = [1,2,3];
aArray['stackoverflow'] = 'What\'s up?';
aArray['x2'] = [4,5,6];
var keys = [];
for(var key in aArray) {
  if (aArray.hasOwnProperty(key)) {
    keys.push(key);
  }
}
console.log(keys);

Is there any easy/short way how to get array of keys to array variable without loop?

If so, additionally, is possible to apply some regular expression to key list to get just keys that match such pattern (let's say /^x/) without another loop?

Let's have an associative array like this:

var aArray = {};
aArray.id = 'test';
aArray['x1'] = [1,2,3];
aArray['stackoverflow'] = 'What\'s up?';
aArray['x2'] = [4,5,6];
var keys = [];
for(var key in aArray) {
  if (aArray.hasOwnProperty(key)) {
    keys.push(key);
  }
}
console.log(keys);

Is there any easy/short way how to get array of keys to array variable without loop?

If so, additionally, is possible to apply some regular expression to key list to get just keys that match such pattern (let's say /^x/) without another loop?

Share Improve this question edited Jan 5, 2016 at 14:40 Ωmega asked Jul 19, 2012 at 12:55 ΩmegaΩmega 43.7k35 gold badges142 silver badges211 bronze badges
Add a ment  | 

2 Answers 2

Reset to default 17

Is there any easy/short way how to get array of keys to array variable without loop..?

Yes, ECMAScript 5 defines Object.keys to do this. (Also Object.getOwnPropertyNames to get even the non-enumerable ones.) Most moderns browser engines will probably have it, older ones won't, but it's easily shimmed (for instance, this shim does).

If so, additionally, is possible to apply some regular expression to key list to get just keys that match such pattern (let's say /^x/) without (another) loop?

No, no built-in functionality for that, but it's a fairly straightforward function to write:

function getKeys(obj, filter) {
    var name,
        result = [];

    for (name in obj) {
        if ((!filter || filter.test(name)) && obj.hasOwnProperty(name)) {
            result[result.length] = name;
        }
    }
    return result;
}

Or building on Object.keys (and using ES2015+ features, because I'm writing this part in late 2020):

function getKeys(obj, filter) {
    const keys = Object.keys(obj);
    return !filter ? keys : keys.filter(key => filter.test(key) && obj.hasOwnProperty(key));
}

In the year 2020, every browser supports this back to IE9. This is the way to go.

JavaScript 1.8.5 has this functionality built in with Object.keys(). It returns an array of all of the keys. You could use a shim for non-supported browsers (MDN has help on that too).

As an example see this (jsFiddle)...

var obj = { "cat" : "meow", "dog" : "woof"};
alert(Object.keys(obj)); // "cat,dog"
发布评论

评论列表(0)

  1. 暂无评论