[解決済み] 配列からオブジェクトを作成する
質問
配列内のリストからオブジェクトを作成したい。動的な配列があり、以下のように表示されるはずです。
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 "Uncaught TypeError: object is not a function" 連想性の質問
-
[解決済み】エラー:リスン EACCES 0.0.0.0:80 OSx Node.js
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] JavaScriptのオブジェクトが空であることをテストするにはどうすればよいですか?
-
[解決済み] オブジェクトが配列であるかどうかを確認するにはどうすればよいですか?[重複]。
-
[解決済み] JavaScriptのオブジェクトの配列からidでオブジェクトを検索する
-
[解決済み】JavaScriptのオブジェクトの長さ
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】document.getElementByIDは関数ではありません。
-
[解決済み】フォームコントロールの値アクセサがない
-
[解決済み】Uncaught TypeError: nullのプロパティ'value'を読み取ることができない
-
[解決済み】JavaScriptのgetElementByNameが機能しない
-
[解決済み】ある要素を別の要素に移動させるには?
-
[解決済み】エラー:リクエストのエンティティが大きすぎる
-
[解決済み】Redux TypeError: 未定義のプロパティ 'apply' を読み取れない
-
[解決済み】Babel NodeJS ES6: SyntaxError: 予期しないトークンのエクスポート
-
[解決済み】Javascript、[オブジェクトHTMLInputElement]を表示中。]
-
[解決済み] 変数を使用してオブジェクトのプロパティに動的にアクセスする