2011-06-20 22 views
1

で取得し、ハッシュキーとしてjavascript配列を使用したいことはここで私が何を探しているんだよ...任意の配列要素

var dual = new Array; 
dual=[voter,thisID]; 
var matrix = new Array; 
matrix[dual]=voteint; //this works.. 

が、私は簡単にいずれかまたは両方のキーで値にアクセスしたいのですが(配列)要素:

matrix[*,thisID])=answer; 

このようにワイルドカードは存在しませんが、

1行うことができます...

matrix[voter+'.'+thisID]=voteint; 

と周りの正規表現マッチングを行います ''より良い/より簡単な/より速い方法がありますか?

+0

あなたができることは、すべての行列要素を反復し、それがセレクタと一致するかどうかをチェックする関数を作成することです。これは、すべての一致した要素のセットを返します。 – pimvdb

+0

本当に、うまくいくでしょう。私はパフォーマンスが早過ぎるのを心配していましたし、ネイティブなやり方があることを望んでいました。 – heorling

答えて

2
> var dual = new Array; 
> dual=[voter,thisID]; 

第割り当ては最初の割り当てが無用行う、本来デュアルに割り当てられた配列を置き換えます。

var dual = [voter, thisID]; 

をしかし有権者デュアルは、以前の変数として宣言された、または作成されている場合にのみ:それは書くことができます。以上のように

> var matrix = new Array; 
> matrix[dual]=voteint; //this works.. 

マトリックスに最初割り当ては冗長です。その後、

var voter = 'foo'; 
var thisID = 'baz'; 
var dual = [foo, baz]; 

matrix[dual] = voteint; 

と同等です:

それあなたが書いたので、もし、dual.toString()ある行列にプロパティを割り当てることで、 "作品"

matrix['foo,baz'] = voteing; 

の場合voteintには以前の値が割り当てられています。

が、私は簡単にいずれかまたは両方のキー(配列)の要素によって値 にアクセスしたいと思います:ワイルドカードを除く

> matrix[*,thisID])=answer; 

は、 右この方法では存在しないのですか?

この文脈にはありません。

1行うことができます...

行列[有権者+ + thisID ''] = voteint。

.がカンマに置き換えられた場合は、そうです。

と 正規表現は '。'の前後で一致します。 には、より良い/より簡単な方法がありますか?

オブジェクトが示されている配列を使用することは悪い習慣と考えられます。ここでオブジェクトを使用する方がよいでしょう。

for..inを使用してオブジェクトのプロパティを反復して、各プロパティ名をテストして、目的のプロパティ名を見つけることが妥当なオプションです。継承された列挙可能なプロパティを除外するには、hasOwnPropertyテストも含める必要があります。

+0

ありがとう!良い指針。キーを少数の数字として扱うことは良い考えですか?考え方は長さなどの配列の特性を保持することができ、それをソートすると検索のパフォーマンスなどが向上します。 – heorling

関連する問題