変数を結合する方法について

このQ&Aのポイント
  • JavaScriptで変数を結合する方法について説明します。
  • 変数の結合には「+」演算子を使用しますが、一部の書き方ではエラーが発生することがあります。
  • 正しい書き方は「itemName + i」ではなく、「itemName[i]」です。
回答を見る
  • ベストアンサー

変数は結合できるのでしょうか

いま、以下のA表からB表を表現するjavascriptを作ろうとしていますがうまくいきません。 金額がゼロの項目はスキップして、上詰めにする処理です。 【A表】 aaa 1000 bbb 0 ccc 500 ddd 0 eee 300 【B表】 aaa 1000 ccc 500 eee 300 以下のようなコードを書きました。 var itemName; var itemKingaku; var i = 1; if($('#aaa').text() != 0){ itemName + i = "aaa"; itemKingaku + i = $('#aaa').text(); i = i +1; } if($('#bbb').text() != 0){ itemName + i = "bbb"; itemKingaku + i = $('#bbb').text(); i = i +1; } if($('#ccc').text() != 0){ itemName + i = "ccc"; itemKingaku + i = $('#ccc').text(); i = i +1; } if($('#ddd').text() != 0){ itemName + i = "ddd"; itemKingaku + i = $('#ddd').text(); i = i +1; } if($('#eee').text() != 0){ itemName + i = "eee"; itemKingaku + i = $('#eee').text(); i = i +1; }     この後 itemName + i と itemKingaku + i  をB表にセットする処理が続く。 itemName1,itemName2,itemName3 を表現する方法として 「itemName + i」で表現できないものかと考えたわけです。 でもやっぱりエラーになってしまいました。 itemName + i = "aaa"; のところを "itemName" + i ="aaa"; とやってもだダメでした。 どなたかご指導下さい。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 そのような変数の使い方の場合は配列を使うのが普通です。 itemName[i]のような感じです。 evalという関数を使うと入力された物がそのままJavaScriptとして評価されますがこういった場面ではあまり使わないと思います。 また、ソース内容からjQueryを利用していると思いますのでもっとスマートに書けます。 今の書き方じゃjQueryが活かされませんし、行数が変動したら都度組み直しです。 動作についてはコメントに書いたので参考にしてみてください。 動作サンプル http://hppg.moe.hm/okwave/qa/q8217735/ ==== JavaScript <script> $().ready ( function() { // buttonがクリックされたら $('button').click ( function() { // id="id-table1"にあるthのタグ分をループ $('#id-table1').find('th').each ( function() { // <th>タグの隣の<td>タグが値の為 // 自身の次のタグのtext()を取得 var value = $(this).next().text() - 0; // その値が0以上であるか if ( value > 0 ) { // 0以上の場合は<tr>~</tr>1行分のタグを生成する var html = '<tr><th>' + $(this).text() + '</th>'; html += '<td>' + value + '</td>'; // 生成したタグをid="id-table2"に追加する $('#id-table2').append ( html ); } }); }); }); </script> ==== HTML <h3>【A表】</h3> <table summary="A表" id="id-table1"> <tr><th>aaa</th><td>1000</td></tr> <tr><th>bbb</th><td>0</td></tr> <tr><th>ccc</th><td>500</td></tr> <tr><th>ddd</th><td>0</td></tr> <tr><th>eee</th><td>300</td></tr> </table> <button type="button">B表を生成</button> <h3>【B表】</h3> <table summary="B表" id="id-table2"> </table>

panasobi
質問者

お礼

こんなに早い回答を頂きビックリしています。 本当にありがとうございました。 そうですよね、やはり配列を使うんですよね。 「配列」というヒントとご提示頂いたコードを元に私なりに コードを書いたら、なんとうまくできました。 サンプルまで作って頂き、3倍ほどうれしかったです。 どうもありがとうございました。

その他の回答 (1)

回答No.2

<!DOCTYPE html> <meta charset="UTF-8"> <title></title> <style> </style> <body> <table border="1" id="A"> <caption>A表</caption> <tr><td>aaa <td> 1000 <tr><td>bbb <td> 0 <tr><td>ccc <td> 500 <tr><td>ddd <td> 0 <tr><td>eee <td> 300 </table> <table border="1" id="B"> <caption>B表</caption> <tbody></tbody> </table> <script> function isNotZero (cell) {  return cell.textContent != 0;//innerText } function pickUpCells (rows) {  return rows.cells[1]; } function addCloneTR (cell) {  var tr = cell.parentNode;  this.appendChild (tr.cloneNode (true)); } var table_a = document.querySelector ('#A'); var tbody_b = document.querySelector ('#B > tbody'); Array.prototype  .map.call (table_a.rows, pickUpCells)  .filter (isNotZero)  .forEach (addCloneTR, tbody_b) </script> </body>

panasobi
質問者

お礼

早々の回答ありがとうございました。 参考にさせて頂きました。 ありがとうございます。

関連するQ&A

  • エクセルのマクロについて教えて下さい。

    エクセルのマクロについて教えて下さい。 Sub Ref() Dim ax As String Dim num As Integer, i As Integer Dim arr As Variant Dim tex As String Range("A1").Select ax = ActiveCell.Formula arr = Split(ax, ",") For i = 0 To UBound(arr) num = i + 1 Cells(num, 1).Value = arr(i) Next i For i = 1 To 10 ActiveCell.Offset(, 1).Select tex = ActiveCell.Formula Selection.Resize(num, 1).Select Selection.Formula = tex Selection.Resize(1, 1).Select Next i End Sub このマクロを10行ほどまで対応させたいです。 例として2行の表ですが、           A         B   C  D   E  F 1 C100,C101,C102,C103 aaa bbb ccc ddd eee 2 C104,C105,C106,C107 とうい表を、     A B  C  D   E   F 1 C100 aaa bbb ccc ddd eee 2 C101 aaa bbb ccc ddd eee 3 C102 aaa bbb ccc ddd eee 4 C103 aaa bbb ccc ddd eee 5 C104 aaa bbb ccc ddd eee 6 C105 aaa bbb ccc ddd eee 7 C106 aaa bbb ccc ddd eee 8 C107 aaa bbb ccc ddd eee という表にしたいです。 結合してから展開しようと考えたのですが 1列目の文字列の最後にカンマが無い場合、ある場合がありまして、 対応する事が出来ませんでした。 マクロ初心者なので教えてください。 よろしくお願いします。

  • CSVに外部テキストファイルを列として追加する方法

    こんにちは。 CSVファイル(base.csv)の先頭列に、別のテキストファイル(add.txt)の中身を新規の列として挿入したいと考えているのですが、よい方法がわかりません。。。 どうのような方法を使えば対応することができるでしょうか? どうぞよろしくお願いいたします。 ■CSVファイル(master.csv) title,developer_name,seller_name,primary_genre_name,application_url AAA,BBB,CCC,DDD,EEE AAA,BBB,CCC,DDD,EEE AAA,BBB,CCC,DDD,EEE AAA,BBB,CCC,DDD,EEE ■テキストファイル(add.txt) id 000 111 222 333 ↓ ■目標としたファイル(master.csv) id,title,developer_name,seller_name,primary_genre_name,application_url 000,AAA,BBB,CCC,DDD,EEE 111,AAA,BBB,CCC,DDD,EEE 222,AAA,BBB,CCC,DDD,EEE 333,AAA,BBB,CCC,DDD,EEE

  • SQLについて

    aaa bbb ccc ddd eee ggg hhh ---------------------------------------------- 111 111 111 111 111 111 111 112 112 112 112 112 112 111 112 113 113 113 113 113 111 114 114 114 114 114 114 111 114 114 114 114 114 114 112 114 115 115 114 114 115 111 114 115 115 114 114 115 112 116 116 116 116 116 116 111 116 116 116 116 116 116 112 116 116 116 116 116 117 111 116 116 116 116 116 117 112 118 118 118 118 118 118 118 上記のようなデータより、SQLのSELECTを使用して、以下のように抽出したいです。 抽出条件は以下が全て満たしているものとなります。 ・aaa,ccc,ddd,eee,gggが重複、hhhが小さいもの ・bbbが異なるもの aaa bbb ccc ddd eee ggg hhh ---------------------------------------------- 112 112 112 112 112 112 111 ・・・(1) 112 113 113 113 113 113 111 ・・・(1) 114 114 114 114 114 114 111 ・・・(2) 114 115 114 114 114 115 111 ・・・(2) (1)はaaa,ccc,ddd,eee,gggが重複、bbbが異なるため抽出対象 (2)はaaa,ccc,ddd,eee,gggが重複、bbbが異なるため抽出対象  また、hhhが小さいもの 以上、よろしくお願いします。

  • Excelシートの統合するマクロなどがありましたらお教えください。

    各支店(約200)からExcelシートで送信されてくる報告内容を別のシートに一気にまとめるマクロ等はないでしょうか?ご存知の方よろしくお願いします。 (例) A支店  項目  aaa    bbb    ccc    ddd    eee        10    20     30    0     0         8    8      0     0      0               以下約300件 B支店  項目  aaa    bbb    ccc    ddd    eee        11    22     33    0     0         9    9      0     0      0               以下約300件      別シートに 項目  aaa    bbb    ccc    ddd    eee        10    20     30    0     0         8    8      0     0      0        11    22     33    0     0         9    9      0     0      0                   以下省略           よろしくお願いします       

  • 正規表現で一つ目の区切り文字で区切りたいのですが・・・

    aaa/bbb/ccc/ddd aaa/bbb/ccc/ddd/eee aaa/ccc/ddd $a=~/(.*)\/(.*)/; $1はそれぞれ aaa/bbb/ccc aaa/bbb/ccc/ddd aaa/ccc と成ってしまいます。 このように 「最後の/」で分けられてしまいます。 一つ目の/で分けるにはどうしたらよいでしょうか。

    • ベストアンサー
    • Perl
  • エクセルのリスト表からマトリクス表に丸いを付けたい

    初めて質問させていただきます。 Excel2016を使用しています。 リスト表(A列は重複なし、B列は重複あり) | A | B | 1 | AAA | 111 | 2 | BBB | 222 | 3 | BBB | 444 | 4 | CCC | 222 | 5 | CCC | 333 | 6 | DDD | 333 | 7 | EEE | 333 | 8 | EEE | 444 | マトリクス表(1行目とA列の値は、既に埋め込まれているものです) | A | B | C | D | E | 1 | | 111 | 222 | 333 | 444 | 2 | AAA | ○ | | | | 3 | BBB | | ○ | | ○ | 4 | CCC | | ○ | ○ | | 5 | DDD | | | ○ | | 6 | EEE | | | ○ | ○ | VLOOKUP、INDEX、MATCHなどの関数で考えてみましたが、 正解が見えてきませんでした。 何かよい方法はありますでしょうか。 ぜひよろしくお願いします。

  • EXCELのVBAで空白列を削除して左づめにできますか?

    いつも参考にしています。まだ、マクロの記録にチョット手を加えて自動化?している程度の腕前ですが? 仕事の都合で下記の問題を解決しなくてはならなくなり、皆様のお知恵をお借りしたいと思い質問させて頂きます。 エクセルのワークシートに空白のセルがランダムに入っているデータがあります。これを、ある列まで(例ではD列までの左の空白セルをなくして左づめのデータとしたいのです。 (例)  | A | B | C | D | E | 1|AAA|BBB|CCC|DDD|EEE| 2|   |BBB|CCC|DDD|EEE| 3|AAA|   |CCC|DDD|EEE| 4|AAA|   |CCC|   |EEE| 5|   |   |   |DDD|EEE|     ↓  | A | B | C | D | E | 1|AAA|BBB|CCC|DDD|EEE| 2|BBB|CCC|DDD|   |EEE| 3|AAA|CCC|DDD|   |EEE| 4|AAA|CCC|   |   |EEE| 5|DDD|   |   |   |EEE| ここで、E列以降は詰めないでほしいのです。 できれば、VBAで実現したいのですが、どのような考えで、どのようなコード?を書けばよいのか教えてください。 質問の仕方も用途を得ないで、失礼な質問になっていると思いますが、よろしくお願いします。

  • Excelで同一のデータを抽出して横並びに

    A     B  C     D 商品コード 注文数  商品コード 注文数 aaa     15  ccc     4 bbb      12  ddd     6 ccc     10  aaa     22 ddd     6   eee     10 eee     5   bbb     7 fff       8 kkk 9 kkk 7 lll 4 上記のようなデータを 以下のように同じ商品コードを横並びに表示させたいのですが どういったcountifとかで試したのですが上手くいかず、どのような関数を使えば可能でしょうか? A     B  C     D 商品コード 注文数  商品コード 注文数 aaa     15  aaa     22 bbb      12  bbb     7 ccc     10  ccc     4 ddd     6   ddd     6 eee     5   eee     10 fff       8 kkk 7 kkk 9 lll 4 宜しくお願い致します。

  • jQueryの繰り返し

    下記のようなスクリプトで.cccと.ddd、.eeeと.fffにも同じ処理を適用したいです。 繰り返し処理のようなことができればシンプルなコードで書けると思うのですがやり方がわかりません。 キレイな書き方を教えていただけないでしょうか。 宜しくお願いします。 //スクリプト $(function(){ var $value1 = $('.aaa'); var $value2 = $('.bbb'); 処理内容 });

  • Perlの正規表現について

    Perlの正規表現について質問です. ■質問 aaa bbb aaa bbb ccc "ddd" aaa bbb ccc "ddd eee" aaa bbb ccc ddd eee "fff ggg hhh iii" というような,文字列が書かれているファイルがあるとします. ※ダブルクォーテーションが無い行もあります. ※ダブルクォーテーション内のスペースの数は,行によってそれぞれ異なります. これを,ダブルクォーテーションの中にあるスペースだけ アンダーバーに置換する場合の正規表現を教えて下さい. つまり,下記の出力にしたいです. aaa bbb aaa bbb ccc "ddd" aaa bbb ccc "ddd_eee" aaa bbb ccc ddd eee "fff_ggg_hhh_iii" ■条件 ※ちょっと古いPerlでも動くよう,ゼロ幅肯定/否定後読((?<),(!<))は使わないでください. ※単に実現するだけなら, # cat inputfile | print -pe 'sub f(){}(shift;s/ /_/;return $_;); s/(\".*\")/&f($1)/e;' みたいな感じで置換できそうですが,「正規表現だけで簡単に書けるかどうか」が知りたいのです(正規表現だけで実現出来る場合,そのアルゴリズムを知りたいです).そのため,関数と/eオプションは使わないでください.

    • ベストアンサー
    • Perl

専門家に質問してみよう