1. ホーム
  2. javascript

[解決済み] Javascriptにおけるキーと値のペアのためのオブジェクトと配列の比較

2023-07-21 04:40:04

質問

非常に単純なデータ構造があるとします。

(personId, name)

...そして、これらの数をjavascriptの変数に格納したいとします。私が思うに、あなたは3つのオプションを持っています。

// a single object
var people = {
    1 : 'Joe',
    3 : 'Sam',
    8 : 'Eve'
};

// or, an array of objects
var people = [
    { id: 1, name: 'Joe'},
    { id: 3, name: 'Sam'},
    { id: 8, name: 'Eve'}
];

// or, a combination of the two
var people = {
    1 : { id: 1, name: 'Joe'},
    3 : { id: 3, name: 'Sam'},
    8 : { id: 8, name: 'Eve'}
};

2番目または3番目のオプションは、保存する複数のquot;value"部分(例えば、年齢などを追加する)がある(またはあると予想する)場合に、明らかに進むべき道です。あなたはどちらを選びますか?


編集 : この例では、最も一般的な状況である非シーケンシャルなIDを示すようになりました。

どのように解決するのですか?

それぞれのソリューションにはユースケースがあります。

一対一の関係(単純なマッピングなど)を定義しようとしている場合、特にキーをルックアップキーとして使用する必要がある場合は、最初のソリューションが良いと思います。

2番目のソリューションは、一般的に私にとって最も堅牢であると感じられ、高速なルックアップキーを必要としない場合は、おそらくこれを使用するでしょう。

  • これは自己記述的であるため を使う人に依存する必要がありません。 を使っている人に頼らなくても、キーがユーザーの ID であることがわかります。
  • 各オブジェクトは自己完結しています。 これはデータを別の場所に渡すのに適しています。 つのパラメータ(idとname)の代わりに (idとname)を渡す代わりに を渡すだけです。
  • これはまれな問題ですが、時には キーとして使用するには有効でない場合があります。 をキーとして使用できない場合があります。 例えば、私はかつて 文字列変換をマッピングしたい (例えば、":" から ">" へ) しかし、":".は有効な変数名ではないので、私は、":" は有効な変数名ではないので、私は2番目の方法を使わざるを得ませんでした。 は有効な変数名ではないため、2 番目の方法を使用する必要がありました。
  • これは簡単に拡張可能です。 どこかで、一部の (またはすべての) ユーザーにさらにデータを追加する必要がある場合に備えて を追加する必要がある場合に備えて、簡単に拡張できます。 (すみません、私はあなたの "議論のために"について知っています。 argument's sake"のことは知っていますが、これは重要な点です。 重要な側面です)。

3つ目は、高速なルックアップ時間+上記の利点(データの受け渡し、自己記述)のいくつかが必要な場合には良いでしょう。 しかし、高速なルックアップ時間が必要ない場合は、かなり面倒になります。 また、どちらにしても、オブジェクトの id が、何らかの理由で .