给出这样一个对象:
{ name: "joe" }
我想获得值“name”。我知道我可以使用for构造来迭代对象中的属性,但是我将要处理的对象将始终只有一个键:值对,我不知道属性的名称。进一步说明:
var a = { age: 24 };
console.log(myFunc(a)) // Displays "age"
var b = { job: "cook" };
console.log(myFunc(b)) // Displays "job"
无论如何都可以在不迭代对象的情况下执行此操作吗?我也想在纯Javascript中这样做。没有框架/库。
答案 0 :(得分:6)
优良作法是使用.hasOwnProperty
确保您不从Object原型返回属性:
function myFunc(obj) {
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) return prop;
}
}
答案 1 :(得分:3)
这似乎是你能得到的最好的:
function myFunc(v) {
for (var x in v) { return { prop: x, val: v[x] }; }
return null;
};
答案 2 :(得分:2)
不,迭代是获得属性名称的唯一受到良好支持的方式。所以for...in
时间就是这样。只需将其隐藏在一个函数中它就会好看。
但是,您是否应该考虑使用不同类型的对象,例如{"property": "age", "value": 24}
,甚至是["age", 24]
答案 3 :(得分:2)
您可以迭代对象的属性,只需返回第一个属性。
function myFunc(obj) {
for (var prop in obj) {
return prop;
}
}
编辑:oops,你想要属性名,而不是值
答案 4 :(得分:1)
为什么不迭代?这只是一步。我认为你不能以任何其他方式获得它。如果它让你感觉更好,你甚至可以在第一步之后休息。