如何在数组中捕获对象键

  • 本文关键字:对象 数组 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]);
    console.log(keyArr[0], arrOfObjs[i][keyArr[0]]);
}

前言:不要像你的例子那样使用 for-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]);
}

你可以这样做:

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

。但它除了(我想(避免调用 Object.keys 之外并没有给你买任何东西,事实上你的Object.keys代码过滤掉继承的属性,这可能很有用(尽管在你的例子中不是必需的(。

示例中的对象没有任何继承属性(除非有人对Object.prototype做了一些疯狂的事情(,但要完全等于您的Object.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...
        }
    }
}
好吧

,我不介意[0],我会先删除for循环。喜欢:

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

你可以

使用Underscore以一种非常干净的方式做到这一点.js

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

最新更新