[解決済み] 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 が、何らかの理由で 人 .
関連
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] JavaScriptのオブジェクトが空であることをテストするにはどうすればよいですか?
-
[解決済み] JavaScriptのオブジェクトにキーが存在するかどうかをチェックする?
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み] 2つのJavaScriptオブジェクトのプロパティを動的にマージするにはどうすればよいですか?
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
-
[解決済み】JavaScriptの関数にデフォルトのパラメータ値を設定する
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] TypeScriptのdeclare classとinterfaceの違いとは?
-
[解決済み] BlobからArrayBufferへ移行する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 配列からオブジェクトを生成する
-
[解決済み] チェックボックスが選択されているかどうかを確認するjQuery
-
[解決済み] Angularjs - 現在の日付を表示する
-
[解決済み] node.jsで文字列のsha1ハッシュを取得するにはどうすればよいですか?
-
[解決済み] 文字列がhtmlであるかどうかをチェックする
-
[解決済み] moment.jsでミュータビリティを回避するには?
-
[解決済み] javascriptで文字列から関数を作成する方法はありますか?
-
[解決済み] イテレータでmap()を使用する
-
[解決済み] JSHintの'+'前の改行不良の説明
-
[解決済み] Fetch: ステータスがOKでない場合、プロミスを拒否し、エラーをキャッチするか?