🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JSON

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

JavaScript

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

Q&A

解決済

2回答

731閲覧

JSONデータから取り出した情報を配列に格納したい(格納した際の配列の並び順について)

退会済みユーザー

退会済みユーザー

総合スコア0

JSON

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

JavaScript

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

0グッド

0クリップ

投稿2021/03/27 06:27

編集2021/03/27 08:15

前提・実現したいこと

下記のデータから data.sales[index].period[jndex].value を取り出して配列に格納したいです。
その際に、並びが [400, 500, 600, 700] ではなく、上期・下期ごとに並べたいので [400, 600, 500, 700] としたいのですが、どのように処理をしたらいいのでしょうか。

※下記は上期・下期のみとなりますが、ここには違う文字列が入る事も想定しています。
また、四半期などの情報(第1四半期、第2四半期、第3四半期、第4四半期)が入り data.sales[index].period の要素数が増える事も想定しています。

JSONデータ

js

1const data = { 2 sales: [ 3 { 4 year: 2019, 5 period: [ 6 { 7 title: "上期", 8 value: 400 9 }, 10 { 11 title: "下期", 12 value: 500 13 } 14 ] 15 }, 16 { 17 year: 2020, 18 period: [ 19 { 20 title: "上期", 21 value: 600 22 }, 23 { 24 title: "下期", 25 value: 700 26 } 27 ] 28 } 29 ] 30}

試したこと

js

1const values = []; 2 3for (let i = 0; i < data.sales.length; i++) { 4 for (let j = 0; j < data.sales[i].period.length; j++) { 5 values.push(data.sales[i].period[j].value); 6 } 7} 8 9console.log(values); // [400, 500, 600, 700]

よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

js

1const values = []; 2 3for (let i = 0; i < data.sales[0].period.length; i++) { 4 for (let j = 0; j < data.sales.length; j++) { 5 values.push(data.sales[j].period[i].value); 6 } 7} 8 9console.log(values);

投稿2021/03/27 13:59

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

上期だけ全て、下期だけ全てをそれぞれ抽出してから足し合わせればよいのではないでしょうか。

投稿2021/03/27 06:57

kei344

総合スコア69596

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

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

退会済みユーザー

退会済みユーザー

2021/03/27 07:40

ありがとうございます。 for ループでどのように「上期だけ」「下期だけ」を抽出すればよいのでしょうか。
kei344

2021/03/27 08:05

「上期が入っているか」は data.sales[i].period[j].title が何かを判定すればわかります。それはわかりますか? console.log(values); // [400, 600] この状態にして、次は「下期が入っているか」を判定するようにfor ループを作れば出来ますよ。
退会済みユーザー

退会済みユーザー

2021/03/27 08:11

ありがとうございます。 data.sales[i].period[j].title を文字列で判定すればよい、と言うことでしょうか。 この文字列は変わる事も想定していて、今回の質問内容だけで文字列が変わった場合でも使い回せる実装方法の回答が得られると思っていました。 質問の内容を修正します。失礼いたしました。
kei344

2021/03/27 08:14

探索文字列を配列にしてそれもforでまわせば文字列が増えようと対応できると思いますが、細かい使用があるなら全部最初に出したほうが良いですよ。
退会済みユーザー

退会済みユーザー

2021/03/27 08:17

アドバイスありがとうございます。 細かい仕様も含め質問を修正しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問