Javascript 获取对象的数组';钥匙

Javascript 获取对象的数组';钥匙,javascript,ecmascript-5,Javascript,Ecmascript 5,我希望以数组的形式获取JavaScript对象的键,可以是jQuery,也可以是纯JavaScript 有没有比这更详细的方法 var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' }; var keys = []; for (var key in foo) { keys.push(key); } 您可以使用jQuery的 使用: var foo={ “阿尔法”:“海雀”, “贝塔”:“小猎犬” }; var keys=Object.ke

我希望以数组的形式获取JavaScript对象的键,可以是jQuery,也可以是纯JavaScript

有没有比这更详细的方法

var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [];
for (var key in foo) {
    keys.push(key);
}
您可以使用jQuery的

使用:

var foo={
“阿尔法”:“海雀”,
“贝塔”:“小猎犬”
};
var keys=Object.keys(foo);
console.log(键)/['alpha','beta']

//(或者其他一些顺序,键是无序的)。
我不知道更详细的内容,但我受到启发,通过一行程序请求将以下内容强制放到一行,但不知道它有多像python;)

当然,是获取对象关键帧的最佳方法。如果它在您的环境中不可用,则可以使用示例中所示的代码对其进行简单的填充(除非您需要考虑循环将迭代原型链上的所有属性,这与
Object.keys()
的行为不同)

但是,您的示例代码

var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [];
for (var key in foo) {
    keys.push(key);
}

…可以修改。您可以在变量部分正确地进行赋值

当然,这种行为不同于
Object.keys()
实际上所做的()。您只需使用。

摘要即可 要获取对象的所有键,可以使用
Object.keys()
Object.keys()
将对象作为参数,并返回所有键的数组

例子:
const对象={
a:‘string1’,
b:42,
c:34
};
常量键=对象。键(对象)
控制台日志(键);

console.log(keys.length)//如果您决定使用下划线.js,我们可以轻松访问对象的属性总数

var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [];
_.each( foo, function( val, key ) {
    keys.push(key);
});
console.log(keys);

如果您在此处查找某个对象,以将n深度嵌套对象的键列为平面数组:

const getObjectKeys=(obj,前缀=“”)=>{
返回Object.entries(obj).reduce((收集器,[key,val])=>{
const newKeys=[…收集器,前缀?`${prefix}.${key}`:key]
if(Object.prototype.toString.call(val)='[Object Object]'){
const newPrefix=前缀?`${prefix}.${key}`:key
const otherKeys=getObjectKeys(val,newPrefix)
返回[…新键,…其他键]
}
返回新密钥
}, [])
}


log(getObjectKeys({a:1,b:2,c:{d:3,e:{f:4}}}}}))
除了添加
if(foo.hasOwnProperty(key))
之外,我还会这么做。或者,使用
$.map
.Oh作为一个Pythonic的单行线,虽然…一个古老的问题不值得一个完整的答案,但对于那些想要摆弄的人来说。。。这个解决方案解决了原型声明弄乱x中var
的问题loops@unsynchronized请不要将解决方案作为评论发布。你的评论故意破坏了清晰而有意的页面结构设计。注意:这只适用于现代浏览器(我指的是IE<9)。那么移动浏览器呢?@SmartyTwiti:我不确定。我假设它在类似Chrome或Firefox.MDN中也有上面提到的Polyfill,但注意到IE7和IE8中的bug,然后在这里提到一个更短的Polyfill:在我意识到它是一个静态类方法之前,我尝试调用键作为实例属性的次数。。。理解api——我喜欢这个
var-keys=[],I=0;对于(foo中的键[i++]){}
+1我听说“for in”不保证顺序,你知道Object.keys是否保证顺序吗?@ChrisStephens也不保证顺序,即使键最终位于有序数组中。所有这些解决方案都需要进行
hasOwnProperty()
检查,当然?没有理由不这样做:)也许应该是
var enumerableKeysOnThePrototypeChain
;)也许我们足够聪明,知道如果对象完全是在我们的权限下创建的,而不是从其他地方导入的,那么我们不必担心hasOwnProperty,不像@alex的第二个答案(
for(foo中的键[i++]){}
),因为您仍然在执行
Array.push()
(更不用说声明一个完整的函数了)。python实现应该尽可能依赖于隐式理解,如果不能做到这一点,可以使用lambda表达式。或者
每个
,如果你正在对它们做一些事情的话。
$。每个(foo,函数(index,value){/*用index做点什么*/);
为什么?解释是什么?
var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [];
for (var key in foo) {
    keys.push(key);
}
var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [], i = 0;
for (keys[i++] in foo) {}
var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' };
var keys = [];
_.each( foo, function( val, key ) {
    keys.push(key);
});
console.log(keys);