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

Javascript :: How to get keys of associative array to array variable?

本文关键字:数组 获取 变量 关联 Javascript      更新时间:2023-12-03

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

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/,而不需要另一个循环?

有没有什么简单/快捷的方法可以在没有循环的情况下获得数组变量的键数组。。?

是的,ECMAScript 5定义了Object.keys来执行此操作。(还有Object.getOwnPropertyNames,即使是不可枚举的。)大多数现代浏览器引擎可能会有它,旧的浏览器引擎不会,但它很容易填充(例如,这个填充)。

如果是这样的话,另外,是否可以将一些正则表达式应用到键列表中,只获得与这种模式匹配的键(比如/^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;
}

或者在Object.keys的基础上构建(并使用ES2015+功能,因为我在2020年底写这部分):

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

在2020年 ,每个浏览器都支持这一点回到IE9。这就是要走的路

JavaScript 1.8.5在Object.keys()中内置了此功能。它返回所有键的数组。您可以为不受支持的浏览器使用填充程序(MDN也有这方面的帮助)。

举个例子,看看这个(jsFiddle)。。。

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