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

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

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

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

Q&A

解決済

1回答

1753閲覧

Javascriptで複数のキーワードでレコードを検索したいです

skjdujr9djhf

総合スコア28

JavaScript

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

0グッド

0クリップ

投稿2018/02/13 01:36

前提・実現したいこと

初めての投稿になります。
Javascriptはまだ半月程度の実務経験で、その他の言語もJavaを一週間くらいしか
実務経験をしたことがない、初心者です。
現在javascriptで、テキストボックスに入力した複数キーワードでレコードを
検索する機能を実装したいと思っております。
実装はkintoneのjavascriptカスタマイズで行います。

キーワードはカンマ区切りで、テキストボックスフィールド(client)に一致したキーワードで該当のレコードを検索したいです。

内容)
①テキストボックスに 「aaa,bbb」と入力
②レコードのフィールド「テスト」に①で入力された値が入っていたら、そのレコードを検索する
③条件はor条件とする。

現在は1つのキーワードのみ、検索できるようになってますが、それを
複数の場合でも検索するようにしたいのです。

後でも説明しますが、変数queryに入ってくる条件でレコードの検索を
行っており、今回の対応用のqueryを作成しているのですが、上手く
いっていない状況です。

発生している問題・エラーメッセージ

Chromeでデバックをしておりますが、「Uncaught SyntaxError: Unexpected string」 と表示されています。正しいqueryを作成できていないので、このエラーが出ています。

該当のソースコード

簡単な概要

①変数client はテキストボックスのフィールドを指しており、ここにキーワードを入力する。
②変数 nを定義し、入力された文字列をカンマ区切りにし、何個のキーワードがあるのかを出す。
③n=1(キーワードが1個なら既存の処理にする)
④n>1ならば、複数キーワードでレコード検索したい(今回の対応)
⑤「テスト」とはレコードの一覧画面に表示される時のカラムのフィールドを指す。
このフィールドに「aaa」という値が入っているレコードが存在し、テキストボックスに「aaa」と入力するとそのレコードが検索できます。
⑥100個もキーワードは入力されることはないですが、ループカウンターの上限を100としています。

Javascript

1 2 3if(client != ''){ 4 console.log(client); 5 6 if(query==''){ 7 8 var resArray = client.split(","); 9 console.log(resArray); 10 11 var n = resArray.length; 12 console.log(n); 13 var data = client.split("," , n); 14 15 console.log(data); 16 17 // テストの検索キーワードが1つの場合 18 // これは既存の処理 19 if(n == 1){ 20 query = query + 'テスト like "' + client + '"'; 21 console.log(query); 22 } 23 24 // テストの検索キーワードが2つ以上の場合 25 // 今回改修したい処理 26 if(n > 1){ 27 var i = 0; 28 29 query = 'テスト like "' + data[0] + '"'; 30 console.log(query); 31 32 while(i != n){ 33 34 query = query + ' or テスト like "' + data[i+1]'"'; 35 36 i++; 37 if (i == 100) 38 break; 39 } 40 console.log(query); 41 42 } 43 44 }else{ 45 query = query + ' and テスト like "' + client + '"'; 46 } 47} 48 49

試したこと

キーワードを2個、3個入力した時に検索できる所までは来ています。
今回はn個のキーワードが入力されることを想定したケースを作成したいです。

例えば3個の場合は以下のソースで現在検索できています。
この場合だと3と決め打ちしてるので3個まで検索できています。(2個も拾えてます)

if(client != ''){
console.log(client);

if(query==''){ var data = client.split("," , 3); console.log(data); query = query + '(テスト like "' + data[0] + '" ' + ' or テスト like "' + data[1] + '" ' + ' or テスト like "' + data[2] + '")'; console.log(query); }else{ query = query + ' and テスト like "' + client + '"'; }

}

この場合console.logでqueryの値を確認すると、
テスト like "aaa" or テスト like "bbb" or テスト like "ccc"
となっており、このqueryに基づいて条件のレコードを検索しています。
n個になればorがどんどん増えていきますが、その連結の仕方で悩んでいます。

補足情報(FW/ツールのバージョンなど)

kintoneのjavascriptカスタマイズで機能を実装する

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

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

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

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

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

guest

回答1

0

ベストアンサー

こういうことでは?

query = query + ' or テスト like "' + data[i+1]'"';

query = query + ' or テスト like "' + data[i+1]+'"';

投稿2018/02/13 01:53

m.ts10806

総合スコア80765

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

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

skjdujr9djhf

2018/02/13 04:11

指摘して頂いたとおりに書いてみたところ、意図した動作になりました。 回答ありがとうございます。 likeのダブルコーテーションの中もシングルコーテーションでくくらないといけませんでしたね。 またi+1ではなく、iの初期値を1にしてdata[i]とするようにしました。
m.ts10806

2018/02/13 04:15

あくまで今回は文字列接続部分の抜けですね。javascriptあるあるです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問