回答:
var obj = { first: 'someVal' };
obj[Object.keys(obj)[0]]; //returns 'someVal'
これを使用すると、インデックスによって他のプロパティにもアクセスできます。気をつけて!Object.keys
ECMAScriptによると、返品順序は保証されていませんが、非公式にはすべての主要なブラウザー実装によるものです。詳細については、https://stackoverflow.com/a/23202095を参照してください。
first()
か、似たようなものがこれを処理できるでしょう。
for … in
ループを試して、最初の反復の後で中断します。
for (var prop in object) {
// object[prop]
break;
}
あなたも行うことができますObject.values(example)[0]
。
Object.keys
あなたは最初のアイテムを受け取ることが保証されているので、私はこれよりも好きです。
Object.keys
オブジェクトのプロパティの配列を取得するために使用します。例:
var example = {
foo1: { /* stuff1 */},
foo2: { /* stuff2 */},
foo3: { /* stuff3 */}
};
var keys = Object.keys(example); // => ["foo1", "foo2", "foo3"] (Note: the order here is not reliable)
ドキュメントとクロスブラウザシムはここにあります。その使用例は、こちらの私の回答の別の1つにあります。
編集:わかりやすくするために、他の回答で正しく述べられたことをエコーしたいだけです。JavaScriptオブジェクトのキーの順序は定義されていません。
1ルールバージョン:
var val = example[function() { for (var k in example) return k }()];
for in
チェックせずに使用すると危険なhasOwnProperty
場合があります。短くてすっきりしているからといって、安全で最適なわけではありません。
「最初の」プロパティはありません。オブジェクトキーは順不同です。
それらをループする場合(var foo in bar)
、それらはある順序で取得されますが、将来的には変更される可能性があります(特に他のキーを追加または削除した場合)。
_.find(example) // => {name: "foo1"}
ただし、JavaScript VMの実装に依存しているため、オブジェクトプロパティの内部ストレージ順序は保証されません。
var object = { childIndex: { .. } }; var childObject = _.find(Object);
いいえ。MDCで定義されているオブジェクトリテラルは次のとおりです。
中括弧({})で囲まれた、オブジェクトのプロパティ名と関連する値の0個以上のペアのリスト。
したがって、オブジェクトリテラルは配列ではなく、明示的な名前またはキーワードfor
を使用したループを使用してのみプロパティにアクセスできますin
。
古いIEバージョンではサポートされていないため、Object.keysの使用はお勧めしません。しかし、本当にそれが必要な場合は、上記のコードを使用して、後方互換性を保証できます。
if (!Object.keys) {
Object.keys = (function () {
var hasOwnProperty = Object.prototype.hasOwnProperty,
hasDontEnumBug = !({toString: null}).propertyIsEnumerable('toString'),
dontEnums = [
'toString',
'toLocaleString',
'valueOf',
'hasOwnProperty',
'isPrototypeOf',
'propertyIsEnumerable',
'constructor'
],
dontEnumsLength = dontEnums.length;
return function (obj) {
if (typeof obj !== 'object' && typeof obj !== 'function' || obj === null) throw new TypeError('Object.keys called on non-object');
var result = [];
for (var prop in obj) {
if (hasOwnProperty.call(obj, prop)) result.push(prop);
}
if (hasDontEnumBug) {
for (var i=0; i < dontEnumsLength; i++) {
if (hasOwnProperty.call(obj, dontEnums[i])) result.push(dontEnums[i]);
}
}
return result;
}})()};
機能Firefox(Gecko)4(2.0)Chrome 5 Internet Explorer 9 Opera 12 Safari 5
より詳しい情報: https //developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/keys
ただし、最初の1つだけが必要な場合は、次のような短い解決策を用意できます。
var data = {"key1":"123","key2":"456"};
var first = {};
for(key in data){
if(data.hasOwnProperty(key)){
first.key = key;
first.content = data[key];
break;
}
}
console.log(first); // {key:"key",content:"123"}
オブジェクトの最初のキー名を取得するには、以下を使用できます。
var obj = { first: 'someVal' };
Object.keys(obj)[0]; //returns 'first'
文字列を返すため、次のようなネストされたオブジェクトにアクセスできません。
var obj = { first: { someVal : { id : 1} };
ここでは、そのソリューションではIDにアクセスできません。
実際のオブジェクトを取得したい場合の最善の解決策は、次のようなlodashを使用することです。
obj[_.first(_.keys(obj))].id
最初のキーの値を返すには(最初のキーの名前が正確にわからない場合):
var obj = { first: 'someVal' };
obj[Object.keys(obj)[0]]; //returns 'someVal'
キー名がわかっている場合は、次のように使用します。
obj.first
または
obj['first']
オブジェクト(角括弧)の代わりに配列を使用します。
var example = [ {/* stuff1 */}, { /* stuff2 */}, { /* stuff3 */}];
var fist = example[0];
'foo'識別子を失うことに注意してください。ただし、含まれているオブジェクトに名前プロパティを追加できます。
var example = [
{name: 'foo1', /* stuff1 */},
{name: 'foo2', /* stuff2 */},
{name: 'foo3', /* stuff3 */}
];
var whatWasFirst = example[0].name;
これをしない理由はありますか?
> example.map(x => x.name);
(3) ["foo1", "foo2", "foo3"]
.map()
だけのために存在する組み込みの反復可能オブジェクト
Object.prototype.keys
which を使用すると、オブジェクトのすべてのキーを同じ順序で返します。したがって、最初のオブジェクトが必要な場合は、その配列を取得し、最初の要素を目的のキーとして使用します。
const o = { "key1": "value1", "key2": "value2"};
const idx = 0; // add the index for which you want value
var key = Object.keys(o)[idx];
value = o[key]
console.log(key,value); // key2 value2
最初のキーを取得するよりクリーンな方法を次に示します。
var example = {
foo1: { /* stuff1 */},
foo2: { /* stuff2 */},
foo3: { /* stuff3 */}
};
var object2 = {
needThis: 'This is a value of the property',
foo2: { /* stuff2 */},
foo3: { /* stuff3 */}
};
let [first] = Object.keys(example)
let [firstProp] = Object.keys(object2)
console.log(first)
//Prop : needThis, Value: This is a value of the property
console.log(`Prop : ${firstProp}, Value: ${object2[firstProp]}`)
[first]
。ユーザーは答えとして配列を要求しませんでした。なぜこれを行うのですか?first = Object.keys(example)[0]
答えを配列でラップする必要なしに同じことをします。なぜあなたはもっときれいなの?