让我们有一个像这样的关联数组:
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.keys
会提供)。
如果是这样,另外,可以将一些正则表达式应用于键列表,以仅获得与这种模式匹配的键(例如this shim)而没有(另一个)循环?
不,没有内置功能。注意,这是编写的简单函数:
/^x/
[2020年,每个浏览器都支持IE9。这是要走的路。
JavaScript 1.8.5内置了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())使用填充程序。
作为示例,请参见此[MDN has help on that too)...
jsFiddle