我在迭代父数组时使用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 :(得分:1)
前言:不要像在你的例子中那样使用for-in
循环数组,至少除非你确定你在做什么,否则不要。有关循环数组的更多信息in this answer。
我想知道是否有其他方法来捕获对象密钥,如果我知道只有一个。
从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...
}
}
}
答案 1 :(得分:-1)
好吧,我不介意[0]
,我会首先删除for循环。
像:
var arrOfKeys = arrOfObjs.map((obj)=> Object.keys(obj)[0])
答案 2 :(得分:-1)
您可以使用 Underscore.js
以非常干净的方式做到这一点var keys = _.map(arrOfObjs, function(v, k) { return k; });