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

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

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

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

Q&A

解決済

2回答

451閲覧

JavaScript 部分一致したものを抽出したい。

3hawks25

総合スコア12

JavaScript

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

0グッド

0クリップ

投稿2019/06/29 01:01

前提・実現したいこと

テキストボックス(検索条件)を入力して,検索ボタンをクリックした際に,部分一致したものを全て表示したいと考えています。

現状データとしてA1,A12,A123,A1234,A123B,A123BCのようなものがあるとして,テキストボックスにAを入力した際にAを含むものすべてを取り出したいのですが,なぜかAだけが,データの個数分取り出されてしまいます。

data詳細は表に出すのは難しいため概要だけとなりますが,本質的に重要なのは,通し番号(A1,A12,A123,A1234,A123B,A123BC)で,1つの番号には60~70の情報があります。

JavaScript

1"use strict"; 2 let mainData = new Array(); 3 let csv = ""; 4 5 $(function() {//page load 6 $.get("data.csv", function(data) { 7 csv = $.csv.toArrays(data); 8 for(let i = 0; i < csv.length; i++){ 9 mainData.push(csv[i]); 10 } 11 $(".searchCondition").show(); 12 btnbody.append("<input type = 'button' id = 'btn' onclick = 'searchbtn()' value ='検索'>"); 13 }); 14 }); 15 16 function searchbtn(ary2) {//検索btn click process 17 $("#btn").prop("disabled", true); 18 let num = $("#num").val();//text id get process 19 let targetData = new Array(); 20 21 for(let i = 0; i < 30; i++){//mainData[i][0]が通し番号 22 if(num !== "" && mainData[i][0].indexOf(num) > -1){ 23 csvbody1.append("<tr><td><a href='#' onclick='linkClick(\"" + mainData[i][0] + "\")'>" + mainData[i][0].match(num) + "</a></td></tr>"); 24 }

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

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

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

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

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

Lhankor_Mhy

2019/06/29 01:46

typoがあります。 function searchbtn(ary2) { と for(let i = 0; i < 30; i++){ が閉じてないです。
Lhankor_Mhy

2019/06/29 01:57

ご提示のコードでは csvbody1 が宣言されていませんが、実際には何が入っていますか?
yasutomi

2019/06/29 02:03

このコードでは"use strict";ならエラーになります。 エラーにならないコードの記載をお願いします。
Lhankor_Mhy

2019/06/29 02:19

$.csv.toArrays はなにかのプラグインを使っているのでしょうか? そうであれば、そのドキュメントをご提示ください。
guest

回答2

0

mainData[i][0]だと抽出した結果の一文字目になってませんか?
mainData[i]が正解ともいます。

スマホで斜め読みしただけなので、違ってたらごめんなさい。

投稿2019/06/29 01:45

編集2019/06/29 01:54
oikashinoa

総合スコア2826

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

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

0

ベストアンサー

matchは基本的に「一致した部分を返す」機能ですので、検索文字以外の部分も欲しい場合には正規表現で一致範囲を文字列全体に広げるか
一致した文字があるデータをそのまま出力するのであれば、単純に一致したものがあるかどうかをチェックしif文でマッチした場合だけ出力するようにすればよいと思います。

今回のソースはちょっと環境が明確でないのと、実際にはどういうデータが入っていて、どういう風に表示したいのかのモデルケースもないので予想で書いてみますが、

Javascript

1if(num !== "" && mainData[i][0].indexOf(num) > -1)

ここですでにindexOfを使ってマッチしているかどうかを判断しているので、

Javascript

1if(num !== "" && mainData[i][0].indexOf(num) > -1){ 2 csvbody1.append("<tr><td><a href='#' onclick='linkClick(\"" + mainData[i][0] + "\")'>" + mainData[i][0] + "</a></td></tr>"); 3}

という出力ではだめですかね。

投稿2019/06/29 06:56

45_Shingo

総合スコア177

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

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

3hawks25

2019/07/02 01:08

私の認識不足でした。 予定通りの動作をしました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問