web-dev-qa-db-ja.com

オブジェクトの最初のインデックスを取得する

検討してください:

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

どのようにこれをしますか:

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

最初のインデックスが0ではなくfooという名前であるため、これはうまくいきません。

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

動作しますが、私はそれがfooという名前であることを知りません。それは何でも名前を付けることができます。私はただ最初が欲しいのです。

194
Ryan Florence

オブジェクトの順序が重要な場合は、オブジェクトを配列に格納するようにJSONスキーマを修正する必要があります。

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

または多分:

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

Ben Alpert氏が指摘しているように、Javascriptオブジェクトのプロパティは順不同で、オブジェクトリテラルで指定されているのと同じ順序で列挙すると予想される場合、コードは壊れています。「最初の」プロパティはありません。

60
Miles

ただ楽しみのためにこれはJS 1.8.5で動作します

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

これはあなたがやるのと同じ順序に一致します

for (o in obj) { ... }
318
Jacob

もしあなたが何か簡潔にしたいのなら:

for (first in obj) break;

alert(first);

関数としてラップ

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

それらは実際にはではありませんが、あなたはすることができます

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

.hasOwnProperty()はプロトタイプオブジェクトを無視するのに重要です。

76
Luke Schafer

Javascriptオブジェクトは順序付けされていないので、これは最初のものにはなりませんが、場合によってはこれで問題ありません。

myObject[Object.keys(myObject)[0]]
74
Rob Fox

使用できるオブジェクトの最初のキーに

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

価値のために

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

最初の要素を取得する方法はありません。JavaScriptの「ハッシュ」(オブジェクト)には順序のないプロパティがあります。最善の策は、キーを配列に格納することです。

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

それからそれを使って適切な値を取得します。

object[keys[0]]
17
Sophie Alpert

ES6

const [first] = Object.keys(obj)
13
Richard Ayotte

アンダースコアを使用すると、_.pairsを使用して、次のように最初のオブジェクトエントリをキーと値のペアとして取得できます。

_.pairs(obj)[0]

それから、そのキーはさらに[0]添え字を付けて利用可能になり、その値は[1]を持ちます。

12
George Jempty

昨日も同じ問題がありました。私はこのように解決しました:

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.

最も洗練された解決策ではありません、そして私はそれが異なったブラウザで異なった結果を生むかもしれないと確信しています(すなわち仕様は列挙されたのと同じ順序で列挙する必要はないと言います)。しかし、私は自分のオブジェクトに1つのプロパティしかないので、それは問題にはなりませんでした。私はただ最初の鍵が必要でした。

10

オブジェクトの最初のキーを取得する

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

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

// result will return 'foo1'
6
ldls

あなたはこのようなことをすることができます:

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'} )
6
CMS

CMS回答 に基づく。値を直接取得するのではなく、代わりにインデックスでキーを取得し、これを使用して値を取得します。

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'
5
yckart

私の解決策:

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));
2
diyism