是否有一种优雅的方法来访问对象的第一个属性。。。

你不知道你的财产的名字而不使用像..这样的循环。。in或jQuery的$.each

例如,我需要在不知道foo1名称的情况下访问foo1对象:

var example = {
    foo1: { /* stuff1 */},
    foo2: { /* stuff2 */},
    foo3: { /* stuff3 */}
};

当前回答

尝试for…in循环,并在第一次迭代后中断:

for (var prop in object) {
    // object[prop]
    break;
}

其他回答

我们也可以采用这种方法。

var example = {
  foo1: { /* stuff1 */},
  foo2: { /* stuff2 */},
  foo3: { /* stuff3 */}
}; 
Object.entries(example)[0][1];

也可以执行Object.values(示例)[0]。

这是一个老问题,但大多数解决方案都假设我们知道属性的名称,但事实并非如此。例如,如果您试图从用户可以上传的文件或类似案例中可视化数据,则情况并非如此。

这是我使用的一个简单函数,在两种情况下都可以使用,即您知道变量,如果不知道,它将返回对象的第一个属性(按字母顺序排序)

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()或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…)”循环中的元素顺序

有什么理由不这样做吗?

> example.map(x => x.name);

(3) ["foo1", "foo2", "foo3"]