2011-10-23 11 views
48

私はこのような配列がある場合:数値以外のオブジェクトプロパティにインデックスでアクセスしますか?

var arr = ['one','two','three']; 

を、私はこれを行うことにより、さまざまな部分にアクセスすることができます。

console.log(arr[1]); 

私は自分のためではなく、キーによってオブジェクトのプロパティにアクセスするにはどうすればよいですか?

例:

var obj = { 
    'something' : 'awesome', 
    'evenmore' : 'crazy' 
}, 
jbo = { 
    'evenmore' : 'crazy', 
    'something' : 'awesome' 
}; 

私はjboから「evenmore」objから各オブジェクト - 「何か」のための最初のプロパティを取得してしまう方法が明示的にプロパティ名を使用して-without?

は今、あなたのいくつかは、私が何かした後だと思うように見える:これはそうではありません

console.log(obj['something']); 

、私は特にちょうど最初の例のように、インデックスを対象としているよ - 場合それが可能だ。

+2

「オブジェクト配列」とはどういう意味ですか?配列*はオブジェクトです。配列ではないオブジェクトだけを意味しますか、オブジェクトの配列を意味しますか?そして、jQueryはあなたの質問にどのように影響しますか?あなたの唯一のコード例は、あなたが既にやっていることを知っている部分を示しています。どのように*問題を説明するいくつかのコードを与える*。 – user113716

+0

@Ӫ_._I私がjQueryをタグ付けした理由は、より広いオーディエンスを得るためです。jQueryを知っている人は、配列の理解が必要であり、私の質問に矛盾するものではなく、教科書です。 – daryl

+3

実際には、jQueryを "知っている"人が多く、JavaScriptを知らない人は多いです(少なくともJavaScriptを知っている人はjQueryを簡単に理解できるはずです)....そして実際の質問に関しては、 objecプロパティにインデックスでアクセスすることはできません。彼らは注文されていません。 –

答えて

72

「可能であれば、最初の例のようにインデックスをターゲットにすることを特に目指しています。」

いいえ、できません。

あなたが得ることができる最も近いオブジェクトのキーの配列を取得し、それを使用することです:

var keys = Object.keys(obj); 

...しかし、キーはあなたが定義された順序で返されるという保証はありません。だから、のように見える終わる可能性:

keys[ 0 ]; // 'evenmore' 
keys[ 1 ]; // 'something' 
+3

オブジェクトの内容を知っていれば、 'Object.keys()'を確実に使うことができます。詳細はこちらhttp://stackoverflow.com/questions/280713/elements-order-in-a-for-in-loop – cronoklee

+1

Object.keys()メソッドは、指定されたオブジェクト自身の列挙可能なプロパティの配列を返します。 for ... inループによって提供される順序と同じ順序です(違いはfor-inループがプロトタイプチェーンのプロパティも列挙します)。 https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/keys –

2
var obj = { 
    'key1':'value', 
    '2':'value', 
    'key 1':'value' 
} 

console.log(obj.key1) 
console.log(obj['key1']) 
console.log(obj['2']) 
console.log(obj['key 1']) 

// will not work 
console.log(obj.2) 

編集:「私は特にちょうど最初の例のように、インデックスを対象としているよ - それが可能だ場合、」

実際には、「インデックス」がキーです。キーの位置を保存する場合は、これを処理するカスタムオブジェクトを作成する必要があります。

+0

私はあなたがキーでアクセスできることを知っています、それは私が求めていたものではありません。 – daryl

+0

@Brogrammer:あなたの質問はあいまいなので、この投稿は質問に答える可能性があります。 – outis

+0

ok、その後もっと説明してください。 – cuzzea

34

私はこれをやって考えることができる唯一の方法は、Object.keys();を使用してあなたの財産を与える方法を作成することです。

var obj = { 
    dog: "woof", 
    cat: "meow", 
    key: function(n) { 
     return this[Object.keys(this)[n]]; 
    } 
}; 
obj.key(1); // "meow" 

デモ:http://jsfiddle.net/UmkVn/

Object.prototype;を使用して、すべてのオブジェクトにこれを拡張することが可能であろうが、それは、通常はお勧めできません。あなたは確かオブジェクトでない場合

var object = { 
    key: function(n) { 
    return this[ Object.keys(this)[n] ]; 
    } 
}; 

function key(obj, idx) { 
    return object.key.call(obj, idx); 
} 

key({ a: 6 }, 0); // 6 
+1

これはクール&魅力的な作品です!なぜそれは受け入れられた答えではないのですか?おそらく、これを汎用的にするために 'return this [Object.keys(this)[n]];'を使うべきです。 – cronoklee

+1

こんにちは2016年から、私たちは未来の人々がまだこれを受け入れられた答えと考えるべきです。大きな解決策 – mhodges

+0

受け入れられた答えではない理由は、es6まではObject.keysの順序が保証されていないからです。したがって、そのコードはいくつかのJSエンジンで動作しますが、すべてのエンジンで動作することは保証されていません。 https://stackoverflow.com/questions/5525795/does-javascript-guarantee-object-property-order – ptoinson

0

代わりに、機能ヘルパーを使用しています。キー()あなたは右の順にキーを返すために起こっている、あなたはこれを行うことができますjqueryのことで代わりに

var keys = [] 
var obj = { 
    'key1' : 'value1', 
    'key2' : 'value2', 
    'key3' : 'value3', 
} 
for (var key in obj){ 
    keys.push(key) 
} 
console.log(obj[keys[1]]) 
console.log(obj[keys[2]]) 
console.log(obj[keys[3]]) 
0

このロジックを試すことができます。

var arr = $.map(obj,function(value, key) { 
    return value; 
}); 
alert(obj[0]); 
0

ます場合は、Object.values()メソッドを使用することができますObject.keys()を使用しないでください。

[ 'a', 'b', 'c' ] 

Object.values()方法:

const object1 = { 
a: 'somestring', 
b: 42, 
c: false 
}; 

console.log(Object.keys(object1)); 

は、以下の配列を印刷します:例えば、指定されたオブジェクト自身の列挙プロパティの配列を返すようObject.keys()方法とは対照的に

指定されたオブジェクト自体の列挙可能なプロパティvaluesの配列を返します。

だからあなたは、同じオブジェクトを持っていますが、代わりに値を使用する場合

const object1 = { 
a: 'somestring', 
b: 42, 
c: false 
}; 

console.log(Object.values(object1)); 

あなたは次の配列になるだろう:あなたはobject1.bにアクセスしたいのであれば

[ 'somestring', 42, false ] 

を、しかし、インデックスを使って代わりに次のものを使用することができます:

Object.values(object1)[1] === 42 

この方法の詳細については、。

関連する問題