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

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

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

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

Q&A

解決済

3回答

1170閲覧

Javascriptで2つの配列を1つの連想配列{Key:Value}に変換する方法を教えてください。

komurojun

総合スコア17

JavaScript

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

0グッド

0クリップ

投稿2020/07/12 02:41

valueAvalueBの各配列をvalueCの連想配列にしたいです。

valueA = ['1','2','3'] valueB = ['A','B','C'] ↓ valueC ={1:A , 2:B , 3:C}

なぜ、このようにしたいかと言うと以下のソースコードの**<td><th>**を交互に出力したいです。

<tr> <% valueA.forEach(function (value) { %> <th><%= value %></th> <% }); %> <% valueB.forEach(function (value) { %> <td><%- value %></td> <% }); %> </tr>

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

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

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

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

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

guest

回答3

0

こんにちは
配列やオブジェクトの操作で便利なライブラリ lodash_.zipObject を使うと、以下によって valueC を得ることが出来ます。

javascript

1const valueC = _.zipObject(valueA, valueB)

補足

ご質問に

以下のソースコードの<td><th>を交互に出力したいです。

とありましたが、これを実現するには、以下のような方法もあるかと思います。こちらはlodashの _.zip を使います。

javascript

1const valueC = _.zip(valueA, valueB).map(([a, b]) => `<th>${a}</th><td>${b}</td>`)

上記によって、valueCに、以下のような配列が得られます。

["<th>1</th><td>A</td>", "<th>2</th><td>B</td>", "<th>3</th><td>C</td>"]

この valueC の要素を、<tr>の中で結合してひとつの文字列にします。

<tr> <%= valueC.join('') %> </tr>

投稿2020/07/12 03:27

編集2020/07/12 03:56
jun68ykt

総合スコア9058

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

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

komurojun

2020/07/12 04:26

ご回答ありがとうございます。 lodashを使うと簡単に出来るのですね。勉強になりました。 ただ、今回はこれだけの為に lodashを入れたくないなと思いましたので見送らせていただきます。
jun68ykt

2020/07/12 04:28

どういたしまして???? 参考になれば幸いです。
guest

0

javascript

1valueC = valueA.reduce((x,y,z)=>(x[y]=valueB[z],x),{});

とか

javascript

1valueC = Object.fromEntries(valueA.map((x,y)=>[x,valueB[y]]));

投稿2020/07/12 02:54

yambejp

総合スコア116724

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

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

komurojun

2020/07/12 04:28

ご回答ありがとうございます。 自分の環境だとエラーで上手く値がとれませんでした。
guest

0

ベストアンサー

このようにしたいかと言うと以下のソースコードの<td><th>を交互に出力したいです。

valueCを作らず、素直に、インデックスを順番に回して書く方がいいと思います。
RubyやPythonのzipに相当する関数が無いので、同じ事をしようとすると、結局2つめの配列にはインデックスによるアクセスが必要になります。

また、valueCを作ってからループを回す場合は、意図通りの順番が保証されるかどうか仕様を確認しましょう。MDNの「for in」のページには「順不同」と書いてあります。

投稿2020/07/12 03:22

otn

総合スコア85901

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

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

komurojun

2020/07/12 04:29

単純に「for」で回す事でそれぞれ思い通りに取得出来ました。ありがとうございます。 <% for (let i = 0; i < valueA.length; i++) { %> <th><%- valueA[i] %></th> <td><%- valueB[i] %></td> <% } %>
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問