204

検討:

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

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

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

明らかに、最初のインデックスの名前は。fooではなく、であるため、これは機能しません0

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

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

4

14 に答える 14

204

簡潔なものが必要な場合は、次を試してください。

for (first in obj) break;

alert(first);

関数としてラップ:

function first(obj) {
    for (var a in obj) return a;
}
于 2010-05-04T23:58:58.240 に答える
77

それらは実際には注文されていませが、次のことができます。

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

.hasOwnProperty()プロトタイプ化されたオブジェクトを無視することが重要です。

于 2009-05-26T05:34:41.093 に答える
61

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

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

または多分:

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

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

于 2009-05-26T05:22:40.530 に答える
40

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

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

価値のために

console.log(object[Object.keys(object)[0]]);//print key's value
于 2017-01-05T10:16:25.140 に答える
18

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

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

次に、それを使用して適切な値を取得します。

object[keys[0]]
于 2009-05-26T05:06:50.457 に答える
12

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

_.pairs(obj)[0]

次に、キーはさらに[0]下付き文字で利用可能になり、値は[1]

于 2013-08-29T18:21:55.230 に答える
10

私は昨日同じ問題を抱えていました。私はこのようにそれを解決しました:

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 つしかないため、問題はありませんでした。最初の鍵が必要でした。

于 2009-05-26T05:12:20.030 に答える
7

次のようなことができます。

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'} )
于 2009-05-26T05:17:34.983 に答える
5

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'
于 2013-06-01T15:12:19.003 に答える
2

私の解決策:

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));
于 2011-12-30T03:22:32.443 に答える