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; });