
いつもありがとうございます。
jqueryでの配列の使い方を知りたいです。
以下のような連想配列を作っています。
実際は数千データで、項目も20項目以上あります。
var array = [
{'title':'商品名1', 'price':2400,'stock':10},
{'title':'商品名2', 'price':5210,'stock':7},
{'title':'商品名3', 'price':1499,'stock':2}
......
];
これを、項目(例えばtitle)で並べ替えとかは出来たのですが、
もっと複雑な使い方がしたいのですがどうしたらいいのかわかりません。
やりたいことは、例えば以下のような条件で取り出したいです。
・titleに、xxxxxというキーワードが入っているデータだけ取り出す
・priceがX以下のデータだけ取り出す
・複数の条件に合ったデータのみ取り出す。
SQLであれば上記の事は簡単に出来るのですが、
配列だとどうやってあつけばいいのかわかりません。。。
最初からデータベースに入っているデータを扱えば?
ってなるのですが、毎回数千データを取ってくると凄く時間がかかります。
なので、データベースから取ってきたデータを一旦配列に全部入れて、
後は配列内だけで処理した方が処理速度が速いので、できれば配列で扱いたいです。
アドバイスなどありましたら何卒よろしくおねがいしますm(_ _)m
No.3ベストアンサー
- 回答日時:
C#やVB.NETのような、マイクロソフトの言語には、統合言語クエリ=LINQ(Langage INtegrated Query)という、集合型データ処理専用の拡張モジュールが存在するため、ステートメントレベルで配列を一気にフィルタリングしたりできます。
LINQには、DBアクセス専用のLINQ for EFやLINQ for SQL、XML用のLinq XMLなどもありますが、もっとも汎用で使用されるのがLINQ for Onjectと呼ばれる、内部オブジェクト専用のLINQモジュールです。
で、そのJavascript版に、LINQ.jsというライブラリがあります。
こちらをご確認。
http://www.atmarkit.co.jp/fdotnet/dotnettips/105 …
ちょっと文法的な慣れが必要ですが、集合型データの処理を革新する強力な手段になるでしょう。
また、LINQ.jsには、jQueryのチェイン・ステートメントに対応するタイプもあり、jQueryの構文中でそのまま使用できます。
回答ありがとうございます!
LINQですか・・・聞いたことないです(汗)
でも参考サイトを見るとなんか出来そうな気がするのでチャレンジしてみます!
ありがとうございます!
No.4
- 回答日時:
> まだ並べ替えでしか試していないのですが、DBから取ってくると数秒かかるのですが配列の中身を並べ替えて再表示だと1秒もかからず一瞬で出来たので
それ、比較対処を間違えてませんか?
DB から並べ替え後のデータを取得する場合、当然ながら DB からのデータ送信というコストがかかります。
もしあなたが「配列の中身を並び替え」た時間の計測が並び替え前のデータを用意した時点から行っていたなら、それは DB からのデータ送信コストを計算に入れることを忘れています。
本気で DB での並べ替えと配列での並べ替えを比較したいのなら、配列側は DB から未並び替えのデータを取得するところから計測を始めなくてはいけません。
再び回答ありがとうございます。
比較対象が違うとかではなく、どちらが早いかだけです。
おっしゃる通り、「DB からのデータ送信というコスト」があるのでDBへのアクセスは1回だけにしたいのです。
現在、サイト開いた時の1回だけDBにアクセスしてデータを取って来ています。
その後の、並べ替えや条件表示の時にもう一度DBにアクセスするのではなく
取って来たデータで処理が出来れば早いと思い、どのように処理して良いか
分からないので質問させていただきました。
意図してる回答になっていなかったらすみません。
No.2
- 回答日時:
通常の配列処理なので,jQueryは全く関係しませんよね。
jQueryの対象分野は基本的にDOM要素で,通常セレクタによる選択を行うと思います。。
また,RDBMS側でフィルタリングできるのであれば,そちらの方が効率がよいのはANo.1の方の書かれている通りだと思います。
その上で,JavaScript側で処理する方法ですが,
・配列をループで回して,条件に合致していくものを別の配列に追加していく
・Array.filterを使ってフィルタリングする
の2種類の方法が思いつきます。
前者は力業ですが,ほとんどの言語で実装できる方法になります。
後者に関しては,コールバック関数を使ってフィルタ条件を指定する方法で,
慣れていれば「filter」という名前で処理がわかりやすいのですが,
コールバック関数に慣れていないとわかりにくく感じるかもしれません。
# jQueryなんかでコールバック関数は普通に使っていると思いますが。
refs) Array.filterに関して
・MDN (Mozilla Developer Network)
https://developer.mozilla.org/ja/docs/Web/JavaSc …
・MSDN (Microsoft Developer Network)
http://msdn.microsoft.com/ja-jp/library/ff679973 …
回答ありがとうございます!
すみません。jqueryとかjavascript自体使い始めて間もなく名前の意味とか何が出来るとか良くわからず質問してしまいました。
コールバックが何を意味してるかすらわからないので、filterは難しそうですね。
一応チャレンジしてみます。
参考URLまでありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
Dir関数で読み取り順を操作でき...
-
エクセルでXY座標に並べられた...
-
C#でbyte配列から画像を表示さ...
-
VB.NETにて、構造体へデータを...
-
COBOLの基本的な事なので...
-
配列の中の最大値とそのインデ...
-
VBA フォルダ内のファイルを、...
-
countif/sumifのようなVBA関数
-
.NET 文字コードの変換
-
vba フィルター 複数条件 3つ以...
-
C言語
-
構造体配列
-
コンボボックスのインデックス...
-
グラフの「項目軸ラベルに使用...
-
AVERAGEIFSに相当する関数はな...
-
Redim とEraseの違いは?
-
複数のtextboxの処理を一括で行...
-
配列をランダムに並び替えても...
-
Excelのメモリ(配列)の上限は2G...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
C#でbyte配列から画像を表示さ...
-
エクセルでXY座標に並べられた...
-
Dir関数で読み取り順を操作でき...
-
vba フィルター 複数条件 3つ以...
-
配列のペースト出力結果の書式...
-
複数のtextboxの処理を一括で行...
-
Excelのメモリ(配列)の上限は2G...
-
配列の中の最大値とそのインデ...
-
大量の変数を定義するにはどう...
-
Excel2010のinputboxで複数デー...
-
COBOLの基本的な事なので...
-
構造体配列内の文字列検索のよ...
-
VBAでMODE関数をつくる
-
Redim とEraseの違いは?
-
VBScriptでCSVファイルを読み出...
-
VB6のメモリ解放に関して
-
VB.NETの配列にExcelから読み込...
-
Segmentation Fault (メモリ制限?)
-
ActiveReports(アクティブレポ...
おすすめ情報