получение первого индекса объекта

<p>рассматривать:</p><pre><code>var object = { foo: {}, bar: {}, baz: {} } </code></pre><p>как бы я это сделал:</p><pre><code>var first = object[0]; console.log(first); </code></pre><p>очевидно, это не работает, потому что первый индекс называется <code>foo</code>, а не <code>0</code>.</p><pre><code>console.log(object['foo']); </code></pre><p>работает, но я не знаю, что называется foo. это можно назвать как угодно. я просто хочу первое.</p>

<p>просто для удовольствия это работает в js 1.8.5</p><pre><code>var obj = {a: 1, b: 2, c: 3}; object.keys(obj)[0]; // "a" </code></pre><p>это соответствует тому же порядку, который вы видели бы делать</p><pre><code>for (o in obj) { ... } </code></pre>

<p>если вы хотите что-то краткое, попробуйте:</p><pre><code>for (first in obj) break; alert(first); </code></pre><p>обернутый как функция:</p><pre><code>function first(obj) { for (var a in obj) return a; } </code></pre>

<p>они не <em>на самом деле</em> заказаны, но вы можете сделать:</p><pre><code>var first; for (var i in obj) { if (obj.hasownproperty(i) && typeof(i) !== 'function') { first = obj[i]; break; } } </code></pre><p><code>.hasownproperty()</code> важна для игнорирования прототипированных объектов.</p>

<p>для первого ключа объекта вы можете использовать</p><pre><code>console.log(object.keys(object)[0]);//print key's name </code></pre><p>для значения</p><pre><code>console.log(object[object.keys(object)[0]]);//print key's value </code></pre>

<p>es6</p><pre><code>const [first] = object.keys(obj) </code></pre>

<p>используя подчеркивание, вы можете использовать \_.pairs, чтобы получить первую запись объекта в виде пары ключ-значение следующим образом:</p><pre><code>\_.pairs(obj)[0] </code></pre><p>тогда ключ будет доступен с дополнительным индексом <code>[0]</code>, значение с кодом <code>[1]</code></p>

<p>у меня была такая же проблема вчера. я решил это так:</p><pre><code>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. </code></pre><p>не самое элегантное решение, и я почти уверен, что оно может давать разные результаты в разных браузерах (то есть в спецификации сказано, что перечисление не требуется для перечисления свойств в том же порядке, в котором они были определены). тем не менее, у меня было только одно свойство в моем объекте, так что это не проблема. мне просто нужен был первый ключ.</p>

<p>получить первый ключ вашего объекта</p><pre><code>const myobject = { 'foo1': { name: 'mynam1' }, 'foo2': { name: 'mynam2' } } const result = object.keys(myobject)[0]; // result will return 'foo1' </code></pre>

<p>вы могли бы сделать что-то вроде этого:</p><pre><code>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'} ) </code></pre>

<p>основано на <a href="https://stackoverflow.com/users/5445/cms">cms</a> <a href="https://stackoverflow.com/a/909036/1250044">ответ</a> . я не получаю значение напрямую, вместо этого я беру ключ по его индексу и использую его для получения значения:</p><pre><code>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' </code></pre>

<p>мое решение:</p><pre><code>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)); </code></pre>