[解決済み] 辞書を作成し、キーと値のペアを動的に追加するには?
質問
投稿から
JSON配列を送信し、Dictionary<string,string>.として受信する。
その投稿と同じことをやろうとしています。唯一の問題は、キーと値が何であるかを前もって知らないということです。だから、私は動的にキーと値のペアを追加することができるようにする必要があり、私はそれを行う方法がわからない。
そのオブジェクトを作成し、キーと値のペアを動的に追加する方法を知っている人はいますか?
試してみました。
var vars = [{key:"key", value:"value"}];
vars[0].key = "newkey";
vars[0].value = "newvalue";
しかし、これではうまくいきません。
どうすればいいですか?
var dict = []; // create an empty array
dict.push({
key: "keyName",
value: "the value"
});
// repeat this last part as needed to add more key/value pairs
基本的には、2つのプロパティ(と呼ばれる)を持つオブジェクトリテラルを作成しています。
key
と
value
を使用)し、それを挿入する。
push()
) を配列に挿入します。
編集する
5年近く経った今、この回答は「通常のJSオブジェクトリテラル(別名マップ、別名ハッシュ、別名辞書)を作成しない」という理由でダウンボートを受けています。
それは
は
しかし、OPが求めた(リンク先の他の質問で例示されている)構造を作ること、それは
オブジェクトリテラルの配列
で、それぞれ
key
と
value
プロパティがあります。なぜその構造が必要なのかは聞かないでください、でも求められたものなのです。
でも、でも、もしプレーンなJSオブジェクトに欲しいものがあれば - そして ではなく OPが要求した構造 - 参照 tcllの回答 しかし、有効なJS名である単純なキーを持つだけなら、ブラケット記法は少し面倒です。このようにすればいいのです。
// object literal with properties
var dict = {
key1: "value1",
key2: "value2"
// etc.
};
また、オブジェクトを作成した後にプロパティを設定するには、通常のドットノテーションを使用します。
// empty object literal with properties added afterward
var dict = {};
dict.key1 = "value1";
dict.key2 = "value2";
// etc.
あなた する キーにスペースや特殊文字がある場合は、ブラケット記法が必要です。例えば、以下のような場合です。
var dict = {};
// this obviously won't work
dict.some invalid key (for multiple reasons) = "value1";
// but this will
dict["some invalid key (for multiple reasons)"] = "value1";
また、キーが動的な場合は、ブラケット記法も必要です。
dict[firstName + " " + lastName] = "some value";
キー(プロパティ名)は常に文字列であり、文字列でない値をキーとして使用すると、文字列に強制されることに注意してください。例えば
Date
オブジェクトはその文字列表現に変換されます。
dict[new Date] = "today's value";
console.log(dict);
// => {
// "Sat Nov 04 2016 16:15:31 GMT-0700 (PDT)": "today's value"
// }
しかし、多くのオブジェクトは以下のような文字列表現を持っているため、これは必ずしもうまくいかないことに注意してください。
"[object Object]"
これは、一意でないキーにはなりません。ですから、次のような場合は注意が必要です。
var objA = { a: 23 },
objB = { b: 42 };
dict[objA] = "value for objA";
dict[objB] = "value for objB";
console.log(dict);
// => { "[object Object]": "value for objB" }
にもかかわらず
objA
と
objB
は全く異なるユニークな要素ですが、どちらも同じ基本的な文字列表現を持っています。
"[object Object]"
.
その理由
Date
がこのような振る舞いをしないのは
Date
プロトタイプに、カスタム
toString
メソッドで、デフォルトの文字列表現をオーバーライドします。そして、あなたも同じことをすることができます。
// a simple constructor with a toString prototypal method
function Foo() {
this.myRandomNumber = Math.random() * 1000 | 0;
}
Foo.prototype.toString = function () {
return "Foo instance #" + this.myRandomNumber;
};
dict[new Foo] = "some value";
console.log(dict);
// => {
// "Foo instance #712": "some value"
// }
(ただし、上記では
ランダム
という数字があるため、名前の衝突が非常に起こりやすくなっています。の実装を説明するためのものです。
toString
.)
そのため、オブジェクトをキーとして使おうとすると、JSはオブジェクトの自前の
toString
の実装がある場合はそれを使用し、ない場合はデフォルトの文字列表現を使用します。
関連
-
[解決済み] GUID / UUIDの作成方法
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] JavaScriptのオブジェクトをループスルーまたは列挙するにはどうすればよいですか?
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] 辞書を繰り返し使用するには?
-
[解決済み] 2つのJavaScriptオブジェクトのプロパティを動的にマージするにはどうすればよいですか?
-
[解決済み] 与えられたキーがすでに辞書に存在するかどうかをチェックする
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] 辞書のリストを辞書の値でソートするにはどうしたらいいですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
vueネットワークリクエストソリューション ネイティブネットワークリクエストとjsネットワークリクエストライブラリ
-
要素ツリー制御によるvueTreeテーブル
-
JavaScriptのクロージャの説明
-
Vueにシンプルなメモ帳機能を実装
-
Javascript Bootstrapのグリッドシステム、ナビゲーションバー、ローテーションの説明
-
vueディレクティブv-bindの使用と注意点
-
Vueのフィルタの説明
-
[解決済み] Error : 未定義のプロパティ 'map' を読み取ることができません。
-
[解決済み】TypeError: Router.use() はミドルウェアの関数を要求しているが、Object を取得した。
-
[解決済み】TypeScript-のAngular Frameworkエラー - "exportAsがngFormに設定されたディレクティブはありません"