質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.45%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

1112閲覧

動的にobjectを追加していく方法

nanase21

総合スコア144

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/12/10 23:59

編集2021/12/11 01:08

実現したいこと

json

1[ 2 {id: 1, title: 'test1', createdAt: '2021-12-10T00:00:00.001Z'}, 3 {id: 2, title: 'test2', createdAt: '2021-12-11T00:00:00.001Z'}, 4 {id: 3, title: 'test3', createdAt: '2021-12-12T00:00:00.001Z'}, 5 {id: 4, title: 'test3', createdAt: '2021-12-12T00:00:00.001Z'}, 6]

上記のようなデータ構造があったときに、下記のようなデータ構造に整形する方法を知りたい。

理想のデータ構造

js

1{ 2  '2021-12-10': { marked: true }, 3  '2021-12-11': { marked: true }, 4  '2021-12-12': { marked: true }, 5  '2021-12-13': { marked: true }, 6}

現状できていること

以下のようなコードで、配列型でそれっぽくは出来たのですが、上記のような「理想のデータ構造」にする方法が分からず困っています。

js

1const arr = data.map((e) => { 2 const created_at = moment(e.created_at).format('YYYY-MM-DD'); 3 return { 4 [created_at]: { marked: true }, 5 }; 6}); 7 8console.log(arr); 9/* 10 Array [ 11 Object { 12 "2021-12-10": Object { 13 "marked": true, 14 }, 15 }, 16 Object { 17 "2021-12-11": Object { 18 "marked": true, 19 }, 20 }, 21 Object { 22 "2021-12-12": Object { 23 "marked": true, 24 }, 25 }, 26 Object { 27 "2021-11-01": Object { 28 "marked": true, 29 }, 30 }, 31 Object { 32 "2021-12-13": Object { 33 "marked": true, 34 }, 35 }, 36 ], 37*/

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

理想のデータ構造がオブジェクト(Object)であるのに対し、Array.prototype.map()は配列(Array)を返しますので、うまくいきません。ArrayをObjectに変換するか、直接Objectを作るようにする必要があります。

いろいろな方法がありますが、単純なものは次の四つだと思います。

  1. Array.prototype.map()で各要素が[キー, 値]となるArrayに変換して、Object.fromEntries()でObjectに変換する。
  2. 収納用の空Objectを用意し、for文でArrayを回しながらObjectにプロパティを入れていく。
  3. 収納用の空Objectを用意し、Array.prototype.forEach()でArrayを回しながらObjectに値を入れていく。
  4. Array.prototype.reduce()で初期値に空Objectを設定し、前のObjectにプロパティを足した新たなObjectを次々と作成しいく。

今のコードを生かすからな1.になると思います。

JavaScript

1const obj = Object.fromEntries(data.map((e) => { 2 const created_at = moment(e.created_at).format('YYYY-MM-DD'); 3 return [ 4 created_at, 5 { marked: true }, 6 ]; 7}));

ただ、よく見るのは2.か3.でしょう。4.は一昔前に流行った関数型プログラミングなのですが、ちょっと慣れてないと作れないと思いますので、サンプルを書いておきます。

JavaScript

1const obj = data.reduce( 2 (p, e) => ({ ...p, [moment(e.created_at).format('YYYY-MM-DD')]: { marked: true } }), 3 {} 4);

投稿2021/12/11 01:00

編集2021/12/11 01:13
raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nanase21

2021/12/11 01:04

@raccyさん ご教示頂きありがとうございます。 よく理解できました。 もしよければ、この場合の型定義方法についてもご教示いただけないでしょうか?
raccy

2021/12/11 01:06

**質問の内容を大きく変えないでください。** 質問の内容が大きく変わってしまったため、この回答が全く意味不明な回答になってしまいました。別の質問があるのであれば、現在の質問を編集するのでは無く、新たに質問を投稿してください。
nanase21

2021/12/11 01:09

申し訳ございませんでした。 質問内容を最初のものに戻しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.45%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問