オブジェクトの最初のインデックスを取得します
-
05-09-2019 - |
質問
考えてみます:
var object = {
foo: {},
bar: {},
baz: {}
}
私はこれをどのようにします:
var first = object[0];
console.log(first);
もちろん、最初のインデックスがfoo
命名されているため、動作しません、
0
ません。
console.log(object['foo']);
は動作しますが、私はそれが名前fooだか分かりません。これは、自由に名前を付けることができます。私は最初にしたい。
解決
オブジェクトの順序が重要である場合は、配列内のオブジェクトを格納するために、あなたのJSONスキーマを修正する必要があります:
[
{"name":"foo", ...},
{"name":"bar", ...},
{"name":"baz", ...}
]
または多分ます:
[
["foo", {}],
["bar", {}],
["baz", {}]
]
リテラル、そこには「最初の」プロパティがありません。ベン・アルパートが指摘するように、JavaScriptオブジェクトのプロパティは順不同であり、あなたは彼らが彼らがオブジェクトに指定されているのと同じ順序で列挙することが予想される場合、あなたのコードが壊れていますP>
他のヒント
ちょうど楽しみのために、これはJS 1.8.5で動作します。
var obj = {a: 1, b: 2, c: 3};
Object.keys(obj)[0]; // "a"
これは、あなたがやって見ることになるのと同じ順序に一致する
for (o in obj) { ... }
あなたが何か簡潔な試みをしたい場合:
for (first in obj) break;
alert(first);
関数としてラップします:
function first(obj) {
for (var a in obj) return a;
}
彼らはの本当にの注文していないが、あなたは行うことができます:
var first;
for (var i in obj) {
if (obj.hasOwnProperty(i) && typeof(i) !== 'function') {
first = obj[i];
break;
}
}
.hasOwnProperty()
は、試作したオブジェクトを無視することが重要である。
javascriptのオブジェクトが順序付けられていないので、これはあなたの最初のものを与えることはありません、しかし、これはいくつかのケースで結構です。
myObject[Object.keys(myObject)[0]]
あなたが使用できるオブジェクトの最初のキーのための
console.log(Object.keys(object)[0]);//print key's name
の値のための
console.log(object[Object.keys(object)[0]]);//print key's value
JavaScriptで「ハッシュ」(オブジェクト)として順不同の性質を持って見て、最初の要素を取得する方法はありません。あなたの最善の策は、アレイ内のキーを格納することです。
var keys = ["foo", "bar", "baz"];
次に、適切な値を取得することを使用します。
object[keys[0]]
ES6
const [first] = Object.keys(obj)
次のようにキーと値のペアとして最初のオブジェクトのエントリを取得するために_.pairsを使用することができますアンダースコアを使用します
_.pairs(obj)[0]
次にキーはさらに[0]
添字で利用可能である、[1]
と値
私は昨日と同じ問題を抱えていました。私はこのようにそれを解決します:
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.
は、最もエレガントな解決策、そして私はそれが別のブラウザで異なる結果をもたらすことを確信している(すなわち、仕様が列挙は、それらが定義されたのと同じ順序でプロパティを列挙するために必要とされていないと言っています)。それは非問題だったのでしかし、私は私のオブジェクトに単一のプロパティを持っていました。私は最初のキーを必要とします。
あなたはこのような何かを行うことができます:
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'} )
あなたのオブジェクトの最初のキーを取得するには、
const myObject = {
'foo1': { name: 'myNam1' },
'foo2': { name: 'myNam2' }
}
const result = Object.keys(myObject)[0];
// result will return 'foo1'
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'
私の解決策ます:
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));