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

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

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

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

JavaScript

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

TypeScript

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

配列

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

Q&A

解決済

1回答

859閲覧

[TypeScript] for文とpushで実装している配列の入れ替え、加工作業を短縮したい

kei0005

総合スコア19

JSON

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

JavaScript

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

TypeScript

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

配列

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

0グッド

0クリップ

投稿2021/09/23 01:53

編集2021/09/23 02:01

前提・実現したいこと

初心者です。どなたかご教授お願いいたします。

TypeScript(Angular)で配列に格納されているJSONを加工したものを新たな配列に入れ直したいのですが、その際にfor文を用いずに実装させたいです。

発生している問題・エラーメッセージ

アロー関数やforEachを用いて実装できるのでは、と思っているのですが具体的な実装方法が思いついていない状態です。

該当のソースコード

TypeScript

1let arrayBefore = []; //JSON 2/* 3arrayBefore には以下のJSONが格納されています 4body: JSON.stringify({ 5 dataSizw: 5, 6 data: [ 7 { 8 userId: '001', 9 userName: '一郎', 10 language: 'ja', 11 Date: '2021-08-16T12:29:59', 12 }, 13 { 14 userId: '002', 15 userName: '二郎', 16 language: 'en', 17 Date: '2021-08-17T12:29:58', 18 }, 19 { 20 userId: '003', 21 userName: '三郎', 22 language: 'ja', 23 Date: '2021-08-18T12:29:57', 24 }, 25 { 26 userId: '004', 27 userName: '四郎', 28 language: 'fr', 29 Date: '2021-08-19T12:29:56', 30 }, 31 { 32 userId: '005', 33 userName: '五郎', 34 language: 'ja', 35 Date: '2021-08-16T12:29:59', 36 }, 37*/ 38let arrayAfter = []; //Beforeの中身を加工したものをここに入れたい 39 40//ここからのfor文をアロー関数やforEachなどで置き換えたい 41for (let i in arrayBefore.data) { 42 const actionDay: Date = new Date(arrayBefore.data[i].Date); 43 44 arrayAfter.push({ 45 actionDay: //Dateを分割する 46 actionDay.getFullYear() + 47 '/' + 48 actionDay.getMonth() + 1 + 49 '/' + 50 actionDay.getDate(), 51 actionTime: //Dateを分割する 52 actionDay.getHours() + 53 ':' + 54 actionDay.getMinutes(), 55 userName: arrayBefore.data[i].userName, 56 language: arrayBefore.data[i].language, 57 }); 58 } 59 60console.log(arrayAfter); 61/* 62arrayAfetrには以下のように要素の固まりが5個pushされています。 63[ 64{ 65actionDay: '2021/8/16', 66actionTime: '12:29' 67userName: '一郎', 68language: 'ja', 69}, 70{ 71要素2つ目(中身省略) 72}, 73{ 74要素3つ目(中身省略) 75}, 76{ 77要素4つ目(中身省略) 78}, 79{ 80要素5つ目(中身省略) 81} 82] 83*/

試したこと

Stack Overflowを覗いてみると似たような質問はあるのですが、配列の一部(今回でいうactionDay, actionTime)のみに特定の操作をするときにどうすればいいのかが解決しませんでした。
https://stackoverflow.com/questions/63489109/from-arrow-function-push-object-to-array

すみませんがどなたかご教授お願いいたします。

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

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

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

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

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

maisumakun

2021/09/23 02:04

> その際にfor文を用いずに実装させたいです。 どのような背景があって、そのような実装をしたいのでしょうか?
kei0005

2021/09/23 02:10

記述量の省略と構文の理解を目的としたものです。
kei0005

2021/09/23 02:14

正確には、記述量を省略できるのではないか?という予想からです
guest

回答1

0

ベストアンサー

「配列の中身を変換して別な配列を作る」という用事なら、それ専用のmapメソッドがあります(MDN)。

投稿2021/09/23 02:14

maisumakun

総合スコア146018

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

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

kei0005

2021/09/23 02:54

以下で実装できました。 ありがとうございました https://www.digitalocean.com/community/tutorials/4-uses-of-javascripts-arraymap-you-should-know-ja https://paiza.io/projects/2e8K2Wfmnkt4K_9r7eXIHw?language=javascript const dataAfter = data.map(item => { const container = {}; const actionDay = new Date(item.Date); container.ActionDay = actionDay.getFullYear() + '/' + (actionDay.getMonth() + 1) + '/' + actionDay.getDate(); container.ActionTime = actionDay.getHours() + ':' + actionDay.getMinutes(); container.userName = item.userName; container.language = item.language; return container; }) console.log(dataAfter); ---------------------------------- [ { ActionDay: '2021/8/16', ActionTime: '12:29', userName: '一郎', language: 'ja' }, { ActionDay: '2021/8/17', ActionTime: '12:29', userName: '二郎', language: 'en' }, { ActionDay: '2021/8/18', ActionTime: '12:29', userName: '三郎', language: 'ja' }, { ActionDay: '2021/8/19', ActionTime: '12:29', userName: '四郎', language: 'fr' }, { ActionDay: '2021/8/16', ActionTime: '12:29', userName: '五郎', language: 'ja' } ]
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問