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

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

詳細はこちら
JavaScript

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

Q&A

2回答

704閲覧

JavaScript 配列

bbb2828

総合スコア4

JavaScript

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

0グッド

0クリップ

投稿2019/10/07 05:09

JavaScript の質問です。
[{Id:a,name:taro},
{Id:b,name:hanako},
{Id:a,name:pochi}]
というデータを
{a:[taro,pochi],b:[hanako]}
と配列を成形したい場合の方法を教えていただきたいです。
for文を使う方法で出来る
と思うのですが、うまくいかなくて困ってます。

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

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

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

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

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

azuapricot

2019/10/07 05:20

うまくいかなくて × 実際にやってみてどういうコードになったのかを提示しましょう
guest

回答2

0

こんにちは

この回答では3つコードを挙げます。以下、所与の配列をaryとし、得たいオブジェクトを resultとします。

1. for文を使う

ご質問に

for文を使う方法で出来る
と思うのですが、

とあったので、まず for文を使ったコード例を挙げます。

javascript

1const ary = 2 [ 3 { Id: 'a', name: 'taro' }, 4 { Id: 'b', name: 'hanako' }, 5 { Id: 'a', name: 'pochi' }, 6 { Id: 'c', name: 'jiro' }, 7 { Id: 'b', name: 'saburo' }, 8 { Id: 'c', name: 'tama' } 9 ] 10 11const result = {} 12 13for (let e of ary) { 14 if (!result[e.Id]) result[e.Id] = [] 15 result[e.Id].push(e.name) 16} 17 18console.log(result)

以下、for文を使わない別解を2つ挙げます。

2. reduce を使う

reduce を使うと、以下のように書けます。

javascript

1const result = ary.reduce((obj, e) => ({ 2 ...obj, [e.Id]: [...(obj[e.Id] || []), e.name] 3}), {})

3. lodash を使う

配列やオブジェクトの操作で便利なライブラリ lodash が提供する、以下のメソッド

を使うと、以下のように書けます。

javascript

1const result = _.mapValues(_.groupBy(ary, 'Id'), subAry => _.map(subAry, 'name'))

投稿2019/10/07 06:15

編集2019/10/07 22:06
jun68ykt

総合スコア9058

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

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

0

javascript

1var a=[ 2 {Id:"a",name:"taro"}, 3 {Id:"b",name:"hanako"}, 4 {Id:"a",name:"pochi"}, 5 ]; 6var b={}; 7a.forEach(x=>{ 8 if(typeof b[x.Id]=="undefined"){ 9 b[x.Id]=[]; 10 } 11 b[x.Id].push(x.name); 12}); 13console.log(b);

投稿2019/10/07 05:20

yambejp

総合スコア116694

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問