我在迭代父数组时使用 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; });