オブジェクトのプロパティを列挙し、プロトタイプを無視する場合、次を使用します。
var instance = { ... };
for (var prop in instance) {
if (instance.hasOwnProperty(prop)) {
...
}
}
instance
にプロパティが1つしかなく、そのプロパティ名を取得したい場合はどうなりますか?これを行うよりも簡単な方法があります:
var instance = { id: "foobar" };
var singleMember = (function() {
for (var prop in instance) {
if (instance.hasOwnProperty(prop)) {
return prop;
}
}
})();
多分 Object.keys はあなたのために働くことができます。長さが1を返す場合、yourObject[Objects.keys[0]]
を使用して、オブジェクトの唯一のプロパティを取得できます。 MDNリンクには、keys
メソッドのない環境で使用するカスタム関数も表示されます1。このようなコード:
var obj = {foo:'bar'},
kyz = Object.keys(obj);
if (kyz.length === 1){
alert(obj[kyz[0]]); //=> 'bar'
} else {
/* loop through obj */
}
1 一部の古いブラウザはObject.keys
をサポートしていません。 MDNリンクは、これらのブラウザーでも機能するようにコードを提供します。ヘッダーを参照 適合性 前述の MDNページ
最短形式:
instance[Object.keys(instance)[0]];
ES6 +機能:
let first = v => v[Object.keys(v)[0]];
次の機能を使用します。
first({a:'first', b:'second'}) // return 'first'
残念ながら、組み込みの「リストプロパティ」関数はありません。また、「getFirstProperty」は確かにありません(特に、プロパティが常に「最初」になるという保証がないため)。
私はあなたがこのような関数を書いた方が良いと思う:
/**
* A means to get all of the keys of a JSON-style object.
* @param obj The object to iterate
* @param count maximum length of returned list (defaults to Infinity).
*/
function getProperties( obj, count )
{
if( isNaN( count ) ) count = Infinity
var keys = []
for( var it in obj )
{
if( keys.length > count ) break;
keys.Push( it );
}
return keys;
}
次に、名前にアクセスできます:
instance = {"foo":"bar"}
// String() on an array of < 2 length returns the first value as a string
// or "" if there are no values.
var prop = String(getProperties(instance, 1));
私の答えは支持されていますが、javascriptオブジェクトのキーの順序などnoがあることを知っておく価値はあります。したがって、理論的には、値の反復に基づいて構築されたコードは一貫性がない場合があります。 1つのアプローチは、オブジェクトを作成し、実際にカウント、順序付けなどを提供するセッターを定義し、このフィールドにアクセスするためのメソッドを提供することです。これは、最新のブラウザで実行できます。
だから、あなたの質問に答えるために、一般的にあなたがアプローチするのはまだ一番のブラウザです。 lodashまたは「hasOwnProperty」の複雑さを隠す他の最新のフレームワークを使用して反復できます。 8月15日Object.keys
は、クロスブラウザおよびユニバーサルとして受け入れられます。結局、IE8は数年前に起こりました。それでも、すべてのキーセットを配列に格納しない場合があります。しかし、Object.keysを使用します。反復に比べて柔軟性があります。
var foo = {bar: 1};
console.log(Object.keys(foo).toString());
文字列を出力します
"bar"
これは古い投稿ですが、最終的に Object.keys() に基づいて次のヘルパー関数を記述しました。
最初のプロパティのkey
とvalue
を返します。
getFirstPropertyKeyAndValue(sourceObject) {
var result = null;
var ownProperties = Object.keys(sourceObject);
if (ownProperties.length > 0) {
if (ownProperties.length > 1) {
console.warn('Getting first property of an object containing more than 1 own property may result in unexpected results. Ordering is not ensured.', sourceObject);
}
var firstPropertyName = ownProperties[0];
result = {key: firstPropertyName, value: sourceObject[firstPropertyName]};
}
return result;
}