Javascript ::如何获取关联数组的键到数组变量?

时间:2012-07-19 12:55:35

标签: javascript regex arrays hash associative-array

让我们有一个像这样的关联数组:

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);

有没有简单/简短的方法如何将 键数组添加到没有循环的数组变量

如果是这样,另外,可以将一些正则表达式应用于键列表,以获得匹配此类模式的键(假设 /^x/ 另一个循环?

2 个答案:

答案 0 :(得分:15)

  

有没有简单/简短的方法如何在没有循环的情况下获取数组变量的数组??

是的,ECMAScript 5定义Object.keys来执行此操作。大多数现代浏览器引擎都可能拥有它,旧版本不会,但它很容易填充(例如,this shim确实如此)。

  

如果是这样,另外,可以将一些正则表达式应用于键列表以获得与这种模式匹配的键(假设/^x/)没有(另一个)循环?

不,没有内置功能。记住,这是一个微不足道的功能:

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;
}

答案 1 :(得分:12)

JavaScript 1.8.5使用 Object.keys() 内置了此功能。它返回所有键的数组。您可以将垫片用于不受支持的浏览器(MDN has help on that too)。

作为示例,请参阅此(jsFiddle)...

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