Javascript 如何捕获数组中的对象键

Javascript 如何捕获数组中的对象键,javascript,Javascript,我使用Object.keys()在迭代父数组时获取对象键,如下所示。我想知道如果我知道只有一种方法,是否还有其他方法可以捕获对象密钥arrOfObjs[i][keyArr[0]]让我头疼 var arrOfObjs = [ {"key1":"val1"}, {"key2":"val2"}, {"key3":"val3"}, ] for(var i in arrOfObjs){ var keyArr = Object.keys(arrOfObjs[i]);

我使用
Object.keys()
在迭代父数组时获取对象键,如下所示。我想知道如果我知道只有一种方法,是否还有其他方法可以捕获对象密钥
arrOfObjs[i][keyArr[0]]
让我头疼

var arrOfObjs = [
    {"key1":"val1"},
    {"key2":"val2"},
    {"key3":"val3"},    
]
for(var i in arrOfObjs){
    var keyArr = Object.keys(arrOfObjs[i]);
    console.log(keyArr[0], arrOfObjs[i][keyArr[0]]);
}

好吧,我不介意
[0]
,我首先要删除for循环。 比如:

var arrOfKeys=arrOfObjs.map((obj)=>Object.keys(obj)[0])


前言:不要像在您的示例中那样使用in循环数组,至少在您确定要做的事情之前不要这样做。有关循环数组的详细信息

我想知道如果我知道只有一种方法,是否还有其他方法可以捕获对象密钥

从对象获取唯一自己的可枚举属性名的最短版本莫过于
object.keys(obj)[0]
。但如果
[0]
困扰您,您可以提前执行:

for(var i in arrOfObjs){ // See note above, don't use for-in here
    var keyArr = Object.keys(arrOfObjs[i])[0];
    // Note ------------------------------^^^
    console.log(keyArr, arrOfObjs[i][keyArr]);
}
您可以这样做:

…但是它除了(我想)避免调用
Object.keys
,实际上你的
Object.keys
代码过滤掉继承的属性之外,什么都买不到,这可能很有用(尽管在你的示例中没有必要)

示例中的对象没有任何继承属性(除非有人对
Object.prototype
做了一些疯狂的事情),但要完全等同于您的
对象。keys
示例,我们必须插入另一个函数调用:

for(var i in arrOfObjs){ // See note above, don't use for-in here
    for (var key in arrOfObjs[i]) {
        if (arrOfObj[i].hasOwnProperty(key)) {
            console.log(key, arrOfObjs[i][key]);
            break; // You've said you know there's only one, but...
        }
    }
}
事实上,要想完全保持一致,我们必须更进一步:

for(var i in arrOfObjs){ // See note above, don't use for-in here
    for (var key in arrOfObjs[i]) {
        if (Object.prototype.hasOwnProperty.call(arrOfObj[i], key)) {
            console.log(key, arrOfObjs[i][key]);
            break; // You've said you know there's only one, but...
        }
    }
}

您可以使用下划线.js以一种非常简洁的方式来实现这一点

var keys = _.map(arrOfObjs, function(v, k) { return k; });

keyArr[0]
有什么问题?“我正在使用Object.keys()在迭代父数组时获取对象键,如下所示。”这不是您要做的,不是。您获取的键与循环或数组无关。它们与数组中的一个条目相关。
var-keys=..keys(arrOfObjs)不是OP代码的远程功能。@t.J.Crowder我是说clean wayWell,如上所述,您的代码不是OP代码的远程功能。等价物将是
var firstKey=u.keys(arrOfObjs[i])[0]
vs.
var firstKey=Object.key(arrOfObjs[i])[0]。添加一个库并不能使它更干净。你可以查阅@t.J.Crowder的官方文档哦,对不起,你完全正确。谢谢,我以为不循环对象会是件好事。我再也不会在数组上使用for-in循环了。@WouldBeNerd::-)好吧,它有它的用途(稀疏数组),链接中有更多内容。谢谢你提供的所有信息!
var keys = _.map(arrOfObjs, function(v, k) { return k; });