我们有一个这样的关联数组:
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/
,而无需另一个循环?
Array#filter
,可以与Object.keys
结合使用,但这需要针对每个键使函数调用回到迭代器函数,这可能会失去意义。 - T.J. CrowderhasOwnProperty
是必要的?如果这样的对象没有内部变量和函数,还会出现哪些其他“键”?省略hasOwnProperty
不会帮助加快算法速度吗? - Ωmega{}
或new Object
(最好是前者)来创建对象,并且你没有向Object.prototype
添加任何可枚举属性(你可能不会这样做,这是一个非常糟糕的主意),那么是的,你可以省略hasOwnProperty
作为一种优化,因为规范定义的Object.prototype
的所有属性都是不可枚举的。如果你要在通过构造函数创建的具有任何可枚举原型属性的对象上使用它,则需要将其保留。 - T.J. Crowder