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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

JavaScript

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

Q&A

解決済

1回答

853閲覧

要素の数を調べたいのですが、要素の文字数が表示されてしまいます。

NaokiUchid

総合スコア14

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

JavaScript

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

0グッド

2クリップ

投稿2021/12/28 16:02

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
Googleスプレッドシートをデータベースにして、条件にあう項目数を示したいと考えています。
入力欄に入力された名前とデータベース上で一致する名前の項目を抜き出すという仕様です。

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

.lenghtで項目数が引っ張ってこれ得るかと考えて下のコードを書いたのですが、該当する項目の文字数がでてきます。
今回だと該当した結果がFukuoka,Saga,Oitaの3項目で、本来であれば3という数字をひろってきて欲しいのに、実際には「7 4 4」と表示されます。

該当のソースコード

js

1 store.read("sheet1", { limit: 1000, offset: 0 }).then(data => { 2 console.dir(data); 3 console.log(" - - - - - - - - - - - "); 4 for (let i = 0; i < data.length; i++) { 5 const element = data[i]; 6 if (document.getElementById("name").value===element.name){ 7 const addresses = element.address; 8 console.log(addresses.length); 9 } 10 } 11 });

試したこと

.lengthを.childElementCountに変えたところ、undefinedと表示されてしまいました。

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

VS Codeを使用しています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

(以下は変更を最小限にしたものです)
forループ内でデータを1つ1つ調べながら、条件に合致する項目であればカウンタに1を加え、
forループを抜けた後にカウンタの最終結果を表示します。

js

1 store.read("sheet1", { limit: 1000, offset: 0 }).then(data => { 2 console.dir(data); 3 // カウンタ 4 let count = 0; 5 for (let i = 0; i < data.length; i++) { 6 const element = data[i]; 7 // 条件に合致する項目であればカウンタに1を加える。 8 if (document.getElementById("name").value === element.name) { 9 count++; 10 } 11 } 12 // カウンタの最終結果を表示する。 13 console.log(count); 14 });

内容まで表示したいなら下記のようにします。
(mapやfilter等を駆使すればもっと短いコードにできるかもしれませんが、理解や可読性の観点から、なるべく元の質問文から最小限の変更になるようにしています)

js

1 store.read("sheet1", { limit: 1000, offset: 0 }).then(data => { 2 console.dir(data); 3 // 検索結果格納用の配列 4 const result = []; 5 for (let i = 0; i < data.length; i++) { 6 const element = data[i]; 7 // 条件に合致する場合は、配列resultにその項目を追加する。 8 if (document.getElementById("name").value === element.name) { 9 result.push(element.address); 10 } 11 } 12 // resultの要素の個数と内容の表示。 13 console.log(`検索結果: ${result.length} 個見つかりました。`); 14 console.log(`内容:${result.join()}`); 15 }); 16

投稿2021/12/28 23:19

編集2021/12/28 23:34
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

NaokiUchid

2021/12/28 23:52

とっても丁寧にありがとうございます! 早速試してみたのですが、両方とも元のコードと同じで、「8 ②10」と返ってきました。 これは、該当するこたえの文字数(一つ目が8文字で、二つ目と三つ目が10文字)が返ってきてるようです。
退会済みユーザー

退会済みユーザー

2021/12/29 02:18 編集

・(一応念のための確認なのですが)私の回答コードの形に変えたあと、コードエディタで保存してブラウザのページを更新されたでしょうか。 前と同じように8②10と表示される原因は、(検索テキストボックスに入れる名前を変えただけで) 元のコードを変えていない、または保存していない、ページを更新していない、という可能性が考えられます。 (ホットリロードに対応していない限り、ページを更新しないと修正後のコードは読み込まれません) ・回答欄の2つ目のコードの形に変えた場合は、少なくとも 「検索結果: xx 個見つかりました。内容:~~」 というような形式で表示されるはずですが、具体的にどのように表示されますでしょうか。 ・回答コードについては、質問者さんが明らかにしていない情報を自分で推測し補完してテストしておりますので、質問者さんの状況と手元の状況が違っている可能性もあります。 お手数ですが、質問者さんのデータベース(スプレッドシート)の内容がわかるもの(どの列に、どのようなデータが入っているのかが具体的にわかる情報[画像のキャプチャがベストです])と、 現状のソースコード全体を省略せず記載していただけないでしょうか。(質問文に記載されている以外のところにバグや考え方の違いが潜んでいる可能性があるため) (プライバシーの観点からそのまま載せられないというような場合はダミーのデータに置き換えてください)
NaokiUchid

2021/12/29 21:32

ご返信くださってたのに気づかず返信が遅れて失礼しました! 保存を確認し再度行ったところ、上のコードで数字が出て下のコードで内容も出ました。 こんな基本的なつまずきのフォローまでしてくださってありがとうございました!!
退会済みユーザー

退会済みユーザー

2021/12/29 21:49

解決して良かったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問