是否有一种优雅的方法来访问对象的第一个属性。。。
你不知道你的财产的名字而不使用像..这样的循环。。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 */}
};
当前回答
正如其他人指出的那样,如果财产的顺序很重要,那么将它们存储在对象中并不是一个好主意。相反,您应该通过方括号使用数组。例如。,
var example = [ {/* stuff1 */}, { /* stuff2 */}, { /* stuff3 */}];
var first = example[0];
请注意,您会丢失“foo”标识符。但您可以向包含的对象添加名称属性:
var example = [
{name: 'foo1', /* stuff1 */},
{name: 'foo2', /* stuff2 */},
{name: 'foo3', /* stuff3 */}
];
var whatWasFirst = example[0].name;
对于那些寻求类似问题答案的人,即:“我如何找到一个或多个匹配特定模式的财产?”,我建议使用Object.keys()。要扩展benekastah的答案:
for (const propName of Object.keys(example)) {
if (propName.startsWith('foo')) {
console.log(`Found propName ${propName} with value ${example[propName]}`);
break;
}
}
其他回答
要获取对象中的第一个关键字名称,可以使用:
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']
这是一个老问题,但大多数解决方案都假设我们知道属性的名称,但事实并非如此。例如,如果您试图从用户可以上传的文件或类似案例中可视化数据,则情况并非如此。
这是我使用的一个简单函数,在两种情况下都可以使用,即您知道变量,如果不知道,它将返回对象的第一个属性(按字母顺序排序)
label函数接收对象d,如果存在则提取键,否则返回对象的第一个属性。
常量数据=[{label:“A”,值:10},{标签:“B”,值:15},{label:“C”,值:20},{label:“D”,值:25},{label:“E”,值:30}]const keys=['label',0,'',null,undefined]常量标签=(d,k)=>k?d[k]:对象.值(d)[0]data.forEach(d=>{console.log(`first:${label(d)},label:${label(d,keys[0])}`)})keys.forEach(k=>{console.log(`${k}的标签:${label(data[0],k)}`)})
对于0、“”、null和undefined等值,将返回数组的第一个元素。
如果您需要访问“对象的第一个属性”,这可能意味着您的逻辑有问题。对象财产的顺序无关紧要。
使用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对象中的键顺序未定义。
也可以执行Object.values(示例)[0]。