2011-07-11 11 views
3

Javascriptでは、users [1] .nameという名前のオブジェクトをユーザーの名前で渡すようなオブジェクト、ユーザーの配列があります。数値配列をアソシエート配列として使用する

私は、増加するカウンタの代わりにそのユーザーのIDをインデックスとして使用したいと考えています。 たとえば、最初のユーザーをユーザーとして開始できます[45]。

しかし、私は、ユーザーの操作を行い一度[45]は、Javascriptを私はusers.lengthを行うとき、私は46

はにそれを強制するために、とにかくあり得るような、数値配列にそれを回すだろうことがわかりましたこの場合、数字を文字列として扱います。 ( ""は動作しません)?

+0

連想配列にオブジェクトを使用する必要がありますが、これには 'length'プロパティはありません。あなたが追加したユーザーの数(必要な場合)をカウンタに保存する必要があります。問題は、このデータ構造に対してどのような操作を実行したいのですか? Btw。配列の場合、 'length'は常に最高のインデックス+ 1になります。実際には配列をこのサイズに拡張するわけではありません。 –

+2

配列をハッシュマップとして使用しないでください。オブジェクトは、ハッシュマップが必要なときに使用されます。 PHPにはJSのような連想配列はありません。 –

+0

なぜハッシュマップの配列ではないですか?代わりにオブジェクトのオブジェクトを使用する必要がありますか? –

答えて

11

あなたはJavaScriptで機能のこの種のための配列を使用することはできません - 詳細については、"Javascript Does Not Support Associative Arrays."

があなたの代わりにObjectとしてusers変数を初期化していることを確認してください参照してください。このオブジェクトには、任意の非順次キーを格納できます。

var users = new Object(); 

// or, more conveniently: 
var users = {}; 

users[45] = { name: 'John Doe' }; 

オブジェクト内のユーザー数を取得するには、ここthis SO answerから盗まれた機能があります:

Object.size = function(obj) { 
    var size = 0, key; 
    for (key in obj) { 
     if (obj.hasOwnProperty(key)) size++; 
    } 
    return size; 
}; 

var users = {}; 
// add users.. 

alert(Object.size(users)); 
+1

私は彼がオブジェクトのオブジェクトではなくオブジェクトの配列を持っていると信じていますか?配列リテラルに対してObjectリテラルを使用することを推奨している場合を除き、その場合は、それをもっと明確にすることができます。私が推測しているのはちょっと気難しい。 – Shaz

+1

@Shaz:JSには連想配列はなく、常にオブジェクトです。 –

+0

@Shaz - あなたがポイントを逃している、彼は彼が望む方法でオブジェクトの配列を使用することはできません、彼はオブジェクトを使用する必要があります – tomfumb

2

ハンスは、ここに正しい答えを持っています。オブジェクトではなく配列でキーを使用します。私はあなたがこれらの2つのリファレンス読むことをお勧めしたい:配列オブジェクトのうち、連想配列を作成しようとすると

http://www.quirksmode.org/js/associative.htmlhttp://blog.xkoder.com/2008/07/10/javascript-associative-arrays-demystified/

は非標準であり、(ゼロになります.LENGTHなど)の問題を引き起こす可能性がありますが。代わりにオブジェクトのキーを使用します。

+1

ありがとうございます。私は記事を参照する反応が大好きです。彼らはいつも私により多くの洞察と理解を与えてくれます。htmlの階層データの配列を整理する方法について話している他の記事がありますか? –

+0

+1、良いリンク! –

関連する問題