Frage

Bedenken Sie:

var object = {
  foo: {},
  bar: {},
  baz: {}
}

Wie würde ich dies tun:

var first = object[0];
console.log(first);

Natürlich, die nicht funktioniert, weil der erste Index foo benannt ist, 0 nicht.

console.log(object['foo']);

funktioniert, aber ich weiß nicht, es foo. Es könnte etwas genannt. Ich will nur das erste.

War es hilfreich?

Lösung

Wenn die Reihenfolge der Objekte von Bedeutung ist, sollten Sie Ihr JSON Schema revidieren die Objekte in einem Array zu speichern:

[
    {"name":"foo", ...},
    {"name":"bar", ...},
    {"name":"baz", ...}
]

oder vielleicht:

[
    ["foo", {}],
    ["bar", {}],
    ["baz", {}]
]

Wie Ben Alpert weist darauf hin, Eigenschaften von Javascript-Objekte sind ungeordnet, und der Code gebrochen wird, wenn Sie erwarten, dass sie in der gleichen Reihenfolge aufzuzählen, dass sie in dem Objekt angegeben werden literal- gibt es keine „erste“ Eigenschaft.

Andere Tipps

Just for fun dies funktioniert in JS 1.8.5

var obj = {a: 1, b: 2, c: 3};
Object.keys(obj)[0]; // "a"

Dies entspricht die gleiche Reihenfolge, dass Sie würden sehen, tun

for (o in obj) { ... }

Wenn Sie etwas prägnanten Versuch:

for (first in obj) break;

alert(first);

als Funktion eingewickelt:

function first(obj) {
    for (var a in obj) return a;
}

sie sind nicht wirklich bestellt, aber Sie tun können:

var first;
for (var i in obj) {
    if (obj.hasOwnProperty(i) && typeof(i) !== 'function') {
        first = obj[i];
        break;
    }
}

die .hasOwnProperty() ist wichtig prototypisiert Objekte zu ignorieren.

Dies wird nicht die ersten, geben als JavaScript-Objekte ungeordnet sind, aber dies ist in einigen Fällen in Ordnung.

myObject[Object.keys(myObject)[0]]

für den ersten Schlüssel des Objekts können Sie

console.log(Object.keys(object)[0]);//print key's name

für Wert

console.log(object[Object.keys(object)[0]]);//print key's value

Es gibt keinen Weg, um das erste Element zu erhalten, als „Hashes“ (Objekte) in JavaScript gesehen haben ungeordnete Eigenschaften. Ihre beste Wette ist den Schlüssel in einem Array zu speichern:

var keys = ["foo", "bar", "baz"];

dann verwenden, den richtigen Wert zu erhalten:

object[keys[0]]

ES6

const [first] = Object.keys(obj)

Verwenden Sie unterstreichen kann _.pairs verwenden, um den ersten Objekteintrag als Schlüsselwertpaar wie folgt zu erhalten:

_.pairs(obj)[0]

Dann mit einem weiteren [0] Index, der Wert mit [1]

verfügbar sein der Schlüssel würde

Ich hatte das gleiche Problem gestern. Ich löste es wie folgt aus:

var obj = {
        foo:{},
        bar:{},
        baz:{}
    },
   first = null,
   key = null;
for (var key in obj) {
    first = obj[key];
    if(typeof(first) !== 'function') {
        break;
    }
}
// first is the first enumerated property, and key it's corresponding key.

Nicht die eleganteste Lösung, und ich bin mir ziemlich sicher, dass es in verschiedenen Browsern zu unterschiedlichen Ergebnissen führen kann (das heißt die Spezifikationen sagt, dass Aufzählung ist nicht erforderlich, um die Eigenschaften in der gleichen Reihenfolge aufzählen, wie sie definiert wurden). Ich hatte jedoch nur eine einzige Eigenschaft in meinem Objekt, so dass ein Nicht-Thema war. Ich brauchte nur den ersten Schlüssel.

Sie können etwas tun:

var object = {
    foo:{a:'first'},
    bar:{},
    baz:{}
}


function getAttributeByIndex(obj, index){
  var i = 0;
  for (var attr in obj){
    if (index === i){
      return obj[attr];
    }
    i++;
  }
  return null;
}


var first = getAttributeByIndex(object, 0); // returns the value of the
                                            // first (0 index) attribute
                                            // of the object ( {a:'first'} )

Um den ersten Schlüssel des Objekts zu erhalten

const myObject = {
   'foo1': { name: 'myNam1' },
   'foo2': { name: 'myNam2' }
}

const result = Object.keys(myObject)[0];

// result will return 'foo1'

Basierend auf CMS beantworten . Ich habe nicht den Wert direkt, sondern ich den Schlüssel an seinem Index nehmen und nutzen diese um den Wert zu erhalten:

Object.keyAt = function(obj, index) {
    var i = 0;
    for (var key in obj) {
        if ((index || 0) === i++) return key;
    }
};


var obj = {
    foo: '1st',
    bar: '2nd',
    baz: '3rd'
};

var key = Object.keyAt(obj, 1);
var val = obj[key];

console.log(key); // => 'bar'
console.log(val); // => '2nd'

Meine Lösung:

Object.prototype.__index = function(index)
{
    var i = -1;
    for (var key in this)
    {
        if (this.hasOwnProperty(key) && typeof(this[key])!=='function')
            ++i;
        if (i >= index)
            return this[key];
    }
    return null;
}
aObj = {'jack':3, 'peter':4, '5':'col', 'kk':function(){alert('hell');}, 'till':'ding'};
alert(aObj.__index(4));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top