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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

JavaScript

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

646閲覧

完全一致可能な関数(matchについて)

sharepo

総合スコア1

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

JavaScript

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/04/08 02:07

前提・実現したいこと

お世話になっております。
現在、javascriptにて、ActiveDirectryにcsvを使って、ユーザーを作成・変更できる機能を作成しております。
その中で、AD内からユーザー情報を取得したcsvの情報(addata)とhtml上に表示したcsvの情報(data[i][j])を突合し、AD内に存在しないユーザーは白、既存のユーザーは青と表示されるよう設定をしているのですが、この色判断機能が部分一致となってしまう不具合が生じております。
例)999が存在しているADに対して、99999を作ろうとすると、すでに存在するユーザーとして判断される。
元々の関数が、indexOfとなっていたため、こちらの関数をmatchに修正することで対応できると踏んでおりましたが、matchにしても部分一致となってしまいます。
これがコードの問題なのかどうかはっきりしたいため、ご助言などいただけますと幸いです。
また、必要なコード分などございましたら、ご連絡ください。

以上、よろしくお願い致します。

■■な機能を実装中に以下のエラーメッセージが発生しました。

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

色判断機能が部分一致となってしまう 例)999が存在しているADに対して、99999を作ろうとすると、すでに存在するユーザー(青色)として判断される。 正)99999は存在しないため、白となる

該当のソースコード

javascript

1・・・ 2 function makeTable(data, tableId) { 3 var rows = []; 4 var table = document.createElement("table"); 5 //完成したテーブルに <table id="userCsvTable">というidを付与します。 6 table.id = "userCsvTable" 7 8 //(縦方向)の要素数を取得・縦方向の繰り返し処理回数を指定 9 for (i = 0; i < data.length; i++) { 10 rows.push(table.insertRow(-1)); 11 if (i === arr.length) { 12 break 13 } 14 15 //(横方向)の要素数を取得・横方向の繰り返し処理回数を指定 これは要素数分、列を作成する処理 16 for (j = 0; j < data[0].length; j++) { 17 cell = rows[i].insertCell(-1); 18 // 追加した行にセルを追加してテキストを書き込む 19 cell.appendChild(document.createTextNode(data[i][j])); 20 if (i == 0) { 21 22 // ヘッダー行(エクセルの、1行目):<th>の部分・背景色と文字色の指定 23 cell.style.backgroundColor = "gray"; 24 cell.style.color = "white"; 25 26 //ヘッダー行:各セルのidにインデックス番号を入れる 27 //(ここでは0ゼロしか入らない・次のステップで正しい連番に置き換えます。) 28 cell.id = i 29 30 //各セルのclassを追加。ここではヘッダー行は index としています。 31 cell.classList.add("index_" + i, "cellContents", "header-cell"); 32 } 33 else { 34 //ヘッダー行以外の内容行(エクセルの、2行目以降) 35 cell.id = i 36 //各セルのclassを追加。2行目以降(ヘッダー行以外)は contents としています。 37 cell.classList.add("contents_" + i, "cellContents", "body-cell") 38 if (j % 16 == 0) { 39 if (addata.match(data[i][j]) != -1) { 40 cell.style.backgroundColor = "blue"; 41 cell.style.color = "white"; 42 } 43・・・

試したこと

if (addata.indexOf(data[i][j]) != -1)を
if (addata.match(data[i][j]))
とすることで完全一致できるかと考えていたのですが、ダメでした。。。
あと、addataの情報とdata[i][j]の情報をtrimなどをして整えてもうまくできませんでした。。。

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

・javascript/html/powershellISE/bat
・jquery-1.9.1.js

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

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

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

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

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

guest

回答1

0

ベストアンサー

関数など使わず、addata === data[i][j]としてはどうでしょうか?

投稿2021/04/08 02:09

編集2021/04/08 02:09
maisumakun

総合スコア146018

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

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

sharepo

2021/04/08 02:20

ご回答いただきありがとうございます。 ご指摘いただいた内容で修正して、実行してみたのですが、存在するユーザーに対しても白判定になりました???? コードの記載間違いあったら申し訳ないです。。。 if (j % 16 == 0) { if (addata === data[i][j]){ cell.style.backgroundColor = "blue"; cell.style.color = "white"; } ※js初心者のため、不快な発言などございましたら申し訳ございません。。。
maisumakun

2021/04/08 02:24 編集

ということは、「完全一致させると正しく判定できない」ということです。 両者に入っているデータを再確認して、正しく判定できる条件を検討してください(たとえば、片方に余計なスペースや改行などが入っている、というこよはありませんか?)。
sharepo

2021/04/08 02:30

なるほど・・承知いたしました、ありがとうございます! 確認してみます。
sharepo

2021/04/08 02:57

追加のご報告となります。 console.logでaddataとdata[i][j]を出力してみたのですが、スペース・改行などは入っていないように見えました。※trimで空白削除もしてみました。 気になるところとしては、addata側は99999と出力していて、data[i][j]側が99999,~~~~と出力していたので、カンマも判定されている?かもしれません。。 ただ、csvの仕様上最初からカンマを抜くは厳しいと思うので、判定の際に、data[i][j]側でカンマ抜きの値として判断できるようにできればなと考えています????
maisumakun

2021/04/08 02:59

> ただ、csvの仕様上最初からカンマを抜くは厳しいと思うので、判定の際に、data[i][j]側でカンマ抜きの値として判断できるようにできればなと考えています???? 目的のデータは先頭に現れることは間違いないですか?それとも、カンマ区切りの途中に来ることもありえますか? (元のデータ構造を正しく把握できていないと、正しく処理はできません)
sharepo

2021/04/08 03:06

先頭に現れることに間違いはないですが、、、カンマを抜いてしまうと後続の文書(氏名等)とくっついて、チェック判断ができない可能性がありました。。。
maisumakun

2021/04/08 03:09

> 先頭に現れることに間違いはないですが、、、カンマを抜いてしまうと後続の文書(氏名等)とくっついて、チェック判断ができない可能性がありました。。。 でしたら、「先頭一致」かつ「続くものがあるとすればコンマかどうか」を判定すればいいだけの話です。エスケープの問題がなければ正規表現でやってもいいですし、`indexOf`で0かを確認してからコンマのチェックに進む、という手段もありです。
sharepo

2021/04/08 06:50 編集

質問ばかりすいません???? 整理&確認させてください。 チェックの流れとして、 indexOfで先頭一致させる→その値にコンマがついているかの判定をさせ ついていればコンマの前までの値を抜き出しさせる といった動作の認識でよろしいでしょうか? 追記〉 ご教示いただいた内容で調査、改修しましたら無事実装できました!!! 本当にありがとうございます????????‍♂️
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問