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

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

ただいまの
回答率

90.76%

  • JavaScript

    15298questions

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

  • jQuery

    6322questions

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

  • Lodash

    11questions

    Lodashは、JavaScriptのユーティリティライブラリ。Underscoreの派生ライブラリで、配列・オブジェクトの操作に便利です。また、コードの可読性も高めることができます。

jQueryで配列からテキストボックスに入力した値以下の部分を取り出す

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 425

toramo

score 5

 実現したいこと

こんにちは。
サイト上にテキストボックスで2ケタの数字を入力できるようにし、
それをあらかじめリスト化してあるscriptから探して
入力した値以下のものに絞り込み全て取り出したいです。

前回質問させていただいた内容の続きになりますので
javascriptやhtmlの元データは前回同様こちらを参考にしています。
また、lodash.jsが必要になります。
(前回underscore.jsと書いてしまいました、すみません)

var Lists= [
 { name: 'あいうえお', hobby: [['趣味1', '30', 'あああ'], ['趣味2', '20', 'いいい'], ['趣味3', '40', 'ううう']]},
 { name: 'かきくけこ', hobby: [['趣味1', '50', 'かかか'], ['趣味2', '30', 'ききき'], ['趣味3', '40', 'くくく'], ['趣味4', '40', 'けけけ']]}
 { name: 'さしすせそ', hobby: [['趣味1', '20', 'さささ'], ['趣味2', '40', 'ししし']]}
];

のような配列がある時に、

<input type="number" class="hobby" name="hobby" value="180" min="1" max="180" step="1">日でマスターできる趣味


のようにしてあるサイト上のテキストボックスに例えば「25」と打ち込むと、
hobbyの欄の2番目に記述してある数字をそれぞれ比較して
25以下の趣味を持つ人に該当するあいうえおさんとさしすせそさんのみ取り出したいです。

同じくサイト上で名前をドロップダウン式で選択し絞り込むようにもしてあるのですが、それは

function filterByName(value) {
    return (value == "") ? _.constant(true) : function(item) {
       var ranges = {
                1: {name: "あいうえお"},
                2: {name: "かきくけこ"},
                3: {name: "さしすせそ"},
           };
        var range = ranges[value];
      return range.name== item.name;
        }
    }


で問題なく絞り込めるので、これを少し形を変えれば出来そうだと思ったのですが
私の実力では動かすことが出来ませんでした。
(上の関数は元サイトの絞り込み関数と少々違っていますが、前に別な場所で教えていただいた際にこのように記述を変えてもらったためそれを使っています)

 試したこと

function filterByHobby(values) {
      return (values == "") ? _.constant(true) : function(item) {
            var hob = [item.hobby[0][1]].concat(item.hobby[1][1],list.hobby[2][1],list.hobby[3][1]);
            return _.some(hob, function(hobby){
                return hobby <= values ;
            });
    }}


と書き換えてみましたが動きませんでした。
基本が分かっていない記述とは思いますが、なにとぞご容赦ください。

リスト内の趣味の欄の全ての2番目の数字を比較し、入力されたテキスト以下のものを取り出すには
どう書けばよいのか教えていただきたく思います。
よろしくお願いいたします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

文字列型で比較してそうですね。
入力もリストの中の数字も parseInt() とかで数値型にして比較しましょう。

それと、わざわざ var hob = ... のようなことをしなくても _.some() の関数内で添字[1] つければ良いです。趣味の数が一定でないとエラー出ますしね。

function filterByHobby(values) {
  return values == ''
    ? _.constant(true)
    : function(item) {
        return _.some(item.hobby, function(hobby) {
          return parseInt(hobby[1], 10) <= parseInt(values, 10);
        });
      };
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/08 22:27

    回答有難うございます!この式に変更したところ、無事に絞り込むことができました!
    someの時点で[1]は有効だったのですね。無知でお恥ずかしいです。
    型など基本的な部分は自分で分かるようにもっと精進します。
    今回は本当に助かりました。有難うございました。

    キャンセル

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

  • ただいまの回答率 90.76%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    chart.jsにて、円グラフで動的変更ができません。

    chart.jsとangular.jsを利用して、入力した数値を円グラフでアニメーションを利用し表示したいと思います。 線グラフについては実践されている方がおり、その方からソースを

  • 受付中

    DataTablesで絞り込みを行いたい。

    DataTablesに対してプルダウン、チェックボックスで絞り込みを行いたい。 EX TABLE FILTER使えよって話ですが、表題通り、 DataTablesのテーブルに対して

  • 解決済

    JavaScriptで特定の行のOption要素の取得について

    Javascriptで複数あるOption要素の中から決まった行のOptionを取得する方法がわかりません。ご教授してもらえると助かります。 <select id="test_

  • 解決済

    JavaScriptで複数のOption要素の入れ替えについて

    以下のようなリストがあり、複数選択後、上ボタンを押下すると入れ替えれるようにしたいです。 <select id="test_list" name="test_list" siz

  • 解決済

    複雑なチェックボックスの条件分岐

    目的 チェックボックスの切替をしたいのですが、複数の条件がぶつかってしまい、どうしてもうまくいきません。 次のHTMLで、「チェックが入った色を持つ果物を表示したい。」というの

  • 解決済

    JS セレクトボタンを元に計算

    以前の質問の追加で質問です。 キャンペーンというチェックボックスを追加したいです。 このボックスをクリックされるとフルーツの代金を計算に含まないように設定したいです。 <f

  • 解決済

    jQueryで配列の語句を前方一致させたい

     実現したいこと こんにちは。恐らく初歩中の初歩のような質問になりますがよろしくお願いいたします。 配列に記入した語句をもとにhtmlの内容を絞り込みたいのですが、 前方一致させた

  • 解決済

    [javascript]select2で選択し3を連動して表示させたい。

    select2で選択しselect3を連動して表示させたい。 途中まで書きましたが、現在htmlに初めからあるselect1と、javascriptでselect2に値をいれている

同じタグがついた質問を見る

  • JavaScript

    15298questions

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

  • jQuery

    6322questions

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

  • Lodash

    11questions

    Lodashは、JavaScriptのユーティリティライブラリ。Underscoreの派生ライブラリで、配列・オブジェクトの操作に便利です。また、コードの可読性も高めることができます。