是否有一种优雅的方法来访问对象的第一个属性。。。
你不知道你的财产的名字而不使用像..这样的循环。。in或jQuery的$.each
例如,我需要在不知道foo1名称的情况下访问foo1对象:
var example = {
foo1: { /* stuff1 */},
foo2: { /* stuff2 */},
foo3: { /* stuff3 */}
};
是否有一种优雅的方法来访问对象的第一个属性。。。
你不知道你的财产的名字而不使用像..这样的循环。。in或jQuery的$.each
例如,我需要在不知道foo1名称的情况下访问foo1对象:
var example = {
foo1: { /* stuff1 */},
foo2: { /* stuff2 */},
foo3: { /* stuff3 */}
};
当前回答
使用Object.keys获取对象的财产数组。例子:
var example = {
foo1: { /* stuff1 */},
foo2: { /* stuff2 */},
foo3: { /* stuff3 */}
};
var keys = Object.keys(example); // => ["foo1", "foo2", "foo3"] (Note: the order here is not reliable)
此处提供了文档和跨浏览器垫片。它的使用示例可以在我的另一个答案中找到。
编辑:为了清楚起见,我只想重复其他答案中正确的表述:JavaScript对象中的键顺序未定义。
其他回答
要获取对象中的第一个关键字名称,可以使用:
var obj = { first: 'someVal' };
Object.keys(obj)[0]; //returns 'first'
返回字符串,因此如果存在嵌套对象,则无法访问该对象,例如:
var obj={first:{someVal:{id:1}};使用该解决方案,您无法访问id。
如果您想获得实际对象,最好的解决方案是使用lodash,如:
obj[_.first(_.keys(obj))].id
要返回第一个键的值,(如果您不知道确切的第一个键名称):
var obj = { first: 'someVal' };
obj[Object.keys(obj)[0]]; //returns 'someVal'
如果您知道密钥名称,请使用:
obj.first
or
obj['first']
否。MDN定义的对象文本是:
一个对象的零对或多对属性名和相关值的列表,用大括号({})括起来。
因此,对象文字不是数组,您只能使用其显式名称或使用in关键字的for循环访问财产。
顶部答案可以生成整个数组,然后从列表中捕获。这是另一个有效的捷径
var obj = { first: 'someVal' };
Object.entries(obj)[0][1] // someVal
尝试for…in循环,并在第一次迭代后中断:
for (var prop in object) {
// object[prop]
break;
}
这是一种更有效的方法,无需调用返回数组的Object.keys()或Object.values():
Object.prototype.firstKey = function () {
for (const k in this) {
if (Object.prototype.hasOwnProperty.call(this, k)) return k;
}
return null;
};
然后你可以像这样使用它:
const obj = {a: 1, b: 2, c: 3}
console.log(obj.firstKey()) //=> 'a'
这不一定会返回第一个键,请参见“for(…in…)”循环中的元素顺序