让我们有一个这样的关联数组:
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/
) 没有另一个循环?
最佳答案
Is there any easy/short way how to get array of keys to array variable without loop..?
是的,ECMAScript 5 定义了 Object.keys
去做这个。 (还有 Object.getOwnPropertyNames
甚至可以得到不可枚举的。)大多数现代浏览器引擎可能会有它,旧的浏览器引擎不会,但它很容易填充(例如,this shim 有)。
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?
不,没有内置的功能,但它是一个编写起来相当简单的函数:
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));
}
关于Javascript::如何将关联数组的键获取到数组变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11561350/