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

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

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

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

Q&A

解決済

2回答

1670閲覧

JavaScript 複数の値を一つの値にまとめて出力したい

dscode

総合スコア1

JavaScript

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

1グッド

1クリップ

投稿2021/04/16 06:48

編集2021/04/16 07:19

前提・実現したいこと

javascript初心者です。
複数出力される値(商品コード)を、間に|を付けて一つの値にまとめる必要があります。
まず複数の値を配列にする必要があると思いますが、その方法が分かりません。

javascriptで
HIDDEN_DATA_FORMというフォームの中に、複数のITEM_CD(商品コード)が格納されていて、
それを動的に取得しています。

該当のソースコード

<script type="text/javascript"> var itemCodes = document.forms.HIDDEN_DATA_FORM.ITEM_CD; for (var i = 0; i < itemCodes.length; i++) { var itemCodesCont = itemCodes[i].value; } </script>

開発ツールのコンソールで上記コードのfor()内最後に
console.log(itemCodesCont);
と加えて実行すると、複数の商品コードを別々の値として
codeA
codeB
というように取得できます。
その複数のコードを|区切りで一つの値としてまとめて1つの変数の値として出力するにはどうすればいいでしょうか。
var mix = 'codeA|codeB';
という形にするイメージです。

|で区切ってまとめるのは、.join('|')を使うのではと考えています。

何卒、よろしくお願いいたします。

shinoharat👍を押しています

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

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

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

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

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

yambejp

2021/04/16 06:53

質問本文中全角と半角の「|」が混ざっていませんか?
dscode

2021/04/16 06:55

ご指摘ありがとうございます。 失礼いたしました。 半角の|を区切りに使用します。
mather

2021/04/16 06:57

コードブロックを使ってコードを書いてください。 ``` この中にコードを書く ``` なお、「出力する」とは console.log() のことですか?
dscode

2021/04/16 07:04 編集

コードブロックについて失礼いたしました。 「出力する」とは、1つにまとめた値を変数mixとすると、 var mix = 'codeA|codeB'; という形にするということを言おうとしていました。
guest

回答2

0

ベストアンサー

想定はこんなかんじですか?

HTML

1<form name="HIDDEN_DATA_FORM"> 2<input type="text" name="ITEM_CD" value="CODE_A"><br> 3<input type="text" name="ITEM_CD" value="CODE_B"><br> 4<input type="text" name="ITEM_CD" value=""><br> 5<input type="button" value="check" onclick="check()"> 6</form>

であれば

javascript

1function check(){ 2 const itemCodesCont=[...document.querySelectorAll('form[name="HIDDEN_DATA_FORM"] [name="ITEM_CD"]')] 3 .map(x=>x.value).filter(x=>x!=="").join('|'); 4 console.log(itemCodesCont); 5}

投稿2021/04/16 07:01

yambejp

総合スコア116724

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

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

dscode

2021/04/16 07:13

ありがとうございます。 想定のHTMLは記述いただいたような形です。 参照させていただきます。
yambejp

2021/04/16 07:59

formにnameをつけるのはあまりおすすめしません idやclass、カスタムデータなどでアクセスしてください
dscode

2021/04/19 00:21

ありがとうございます。 いただいたJavaScriptをChrome開発ツールに入力すると undefinedとなりますが、どこか変えるべき部分がありそうでしょうか。 現在使用していますのが、ebisumartというECシステム固有の、購入完了ページに自動的に出力される下記のようなフォームです。 ``` <form name="HIDDEN_DATA_FORM" m:id="HIDDEN_DATA_TAGS_HERE"> <input type="hidden" name="ITEM_NAME" value="(購入された商品の商品名)" /> <input type="hidden" name="ITEM_CD" value="(購入された商品の商品コード)" />    (以下略) ``` 動的に購入された商品や会員の情報を取得し、アフィリエイトタグにjsで反映して送信する、というタスクです。 固有に設定されたフォームですので、今回の場合はformのnameを変えることはできませんが、今後自身で作成する場合はformにnameを付けないよう留意します。 よろしければ、formにnameを付けない方が良い理由もお教えいただけますと助かります。
dscode

2021/04/19 00:52

サンプルをありがとうございます。確認します。 > formにnameを付けない方が良い理由 こちらもありがとうございます。 こういったページも改めて読むように留意します。
think49

2021/04/19 01:43

HTML5仕様通りに命名しているなら、document.forms.HIDDEN_DATA_FORM はユニークなform要素ノードを参照出来ます。  .
dscode

2021/04/19 03:03

>think49 ありがとうございます。このあたりも再度学習します。
dscode

2021/04/19 04:59 編集

>yambejp お陰様で、下記コードにした所、目的の文字列を得ることができました!ありがとうございました。 ``` const itemCodes=[...document.querySelectorAll('form[name="HIDDEN_DATA_FORM"] [name="ITEM_CD"]')] .map(x=>x.value).filter(x=>x!=="").join('|'); ``` この形で購入商品に関する他の求める値も得ることができましたが、一点、商品購入数(name="ITEM_AMOUNT")だけ得られていません。 コードは下記です。 ``` const itemAmounts=[...document.querySelectorAll('form[name="HIDDEN_DATA_FORM"] [name="ITEM_AMOUNT"]')] .map(x=>x.value).filter(x=>x!=="").join('|'); ``` こちらをChrome開発モードに入れ console.log(itemAmounts);とすると、空白が出力されます。 原因はお分かりになりますでしょうか? 求めるものが購入数であり、他の文字列とは異なり数値であることと関係するかと思い、Number()で囲ってみたりしたのですが不成功です。
yambejp

2021/04/19 05:03

HTMLを質問に追記してください 急にでてきたITEM_AMOUNTをどう理解していいかわかりません
dscode

2021/04/19 05:50

失礼いたしました。 HTMLは下記になります。 ``` <form name="HIDDEN_DATA_FORM"> <input type="hidden" name="ITEM_CD" value="(商品コード1)" /> <input type="hidden" name="ITEM_AMOUNT" value="(商品購入数1)" /> (後略) <input type="hidden" name="ITEM_CD" value="(商品コード2)" /> <input type="hidden" name="ITEM_AMOUNT" value="(商品購入数2)" /> (後略) </form> ``` こちらのHTML内のvalueに、購入商品の商品コードや購入数が動的に出力されています。 複数商品の購入があればその数だけ別のvalueが出力されています。 それらを同じnameごとに|で区切って束ねることが目的になります。
guest

0

その複数のコードを|区切りで一つの値としてまとめて1つの変数の値として出力するにはどうすればいいでしょうか。

結合については認識の通りjoinで問題ないかと思います。
要はvalueだけをまとめた配列を作ればいいのでmapを使って下記のようにしてはどうでしょうか?

js

1const itemCodeAll = itemCodes.map((code) => code.value).join('|';

投稿2021/04/16 06:55

nekoniki

総合スコア2411

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

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

dscode

2021/04/16 07:10

ありがとうございます。 参照させていただきます。
dscode

2021/04/19 00:32

いただいたコードをchromeの開発ツールのConsole内で、自身の変数設定と合わせて入力しておりますが、成功していない状態です。 ``` var itemCodes = document.forms.HIDDEN_DATA_FORM.ITEM_CD; const itemCodeAll = itemCodes.map((code) => code.value).join('|'); for (var i = 0; i < itemCodes.length; i++) { var itemCodesCont = itemCodes[i].value; console.log(itemCodesCont); } ``` 上記ですと、下記エラーとなります。 Uncaught SyntaxError: Invalid or unexpected token この場合どこが間違っているのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問