[解決済み] 配列からオブジェクトを生成する
質問
配列の中のリストからオブジェクトを作成したい。私は動的な配列を持っており、次のように見えるはずです。
var dynamicArray = ["2007", "2008", "2009", "2010"];
そして、このようなオブジェクトをJavaScript ES6で作りたいのです。
const obj = {
2007: {
x: width / 5,
y: height / 2
},
2008: {
x: (2 / 5) * width,
y: height / 2
},
2009: {
x: (3 / 5) * width,
y: height / 2
},
2010: {
x: (4 / 5) * width,
y: height / 2
}
}
内側のオブジェクトは気にしないでください。こんな感じの構造を作りたいだけです。
obj = {
2007: ...,
2008: ...,
...
}
助けてください、ありがとうございます。
どのように解決するのですか?
単純に
const obj = {};
for (const key of yourArray) {
obj[key] = whatever;
}
または、quot;functional" スタイルを好む場合。
const obj = yourArray.reduce((o, key) => Object.assign(o, {[key]: whatever}), {});
を現代のオブジェクト拡散演算子を使って
const obj = yourArray.reduce((o, key) => ({ ...o, [key]: whatever}), {})
例
[
{ id: 10, color: "red" },
{ id: 20, color: "blue" },
{ id: 30, color: "green" }
].reduce((acc, cur) => ({ ...acc, [cur.color]: cur.id }), {})
出力します。
{red: 10, blue: 20, green: 30}
以下はその仕組みです。
reduce
は空のオブジェクトで初期化されます (空の
{}
で初期化されます)、したがって最初の反復の変数は
acc = {}
cur = { id: 10, color: "red" }
. 関数はオブジェクトを返します - 関数本体が括弧でくくられるのはこのためです。
=> ({ ... })
. Spread 演算子は最初の反復では何もしませんので
red: 10
が最初の項目として設定されます。
2回目の繰り返しでは、変数は
acc = { red: 10 }
cur = { id: 20, color: "blue" }
. ここでは、スプレッド演算子
が展開されます。
acc
を返し、この関数は
{ red: 10, blue: 20 }
.
3回目の繰り返し
acc = { red: 10, blue: 20 }
cur = { id: 30, color: "green" }
というように
acc
がオブジェクトの中に広がると、この関数は最終的な値を返します。
関連
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] JavaScriptのオブジェクトが空であることをテストするにはどうすればよいですか?
-
[解決済み] オブジェクトが配列であるかどうかを確認するにはどうすればよいですか?[重複]。
-
[解決済み] JavaScriptのオブジェクトの配列からidでオブジェクトを検索する
-
[解決済み】JavaScriptのオブジェクトの長さ
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] 文字列の最後の文字を取得するにはどうすればよいですか?重複
-
[解決済み] Bootstrap モーダル:トグル時に背景がトップにジャンプする
最新
-
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でdivの要素がオーバーフローしていないかチェックする
-
[解決済み] jQuery UI - 外でクリックされたらダイアログを閉じる
-
[解決済み] uint8配列をbase64エンコードされた文字列に変換する方法は?
-
[解決済み] font-faceフォントのプリロード?
-
[解決済み] Bootstrap モーダル:トグル時に背景がトップにジャンプする
-
[解決済み] JavaScriptの関数の順番:なぜそれが重要なのか?
-
[解決済み] 特定のクラスを持たない要素を選択する方法
-
[解決済み] JavaScript 配列の項目を前に移動させる
-
[解決済み] react-hooksによるステート更新時の非同期コードの実行