アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもありがとうございます。

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

A 回答 (4件)

最初からデータベースに入っているデータを扱えば?


> 毎回数千データを取ってくると凄く時間がかかります。
とか言ってるけど、それはそれこそ問い合わせの SQL の時点で絞り込めばいいだけの話でしょうに。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
まだ並べ替えでしか試していないのですが、DBから取ってくると数秒かかるのですが配列の中身を並べ替えて再表示だと1秒もかからず一瞬で出来たので、配列で処理する方法を探しています。

お礼日時:2014/08/27 19:36

通常の配列処理なので,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 …
    • good
    • 0
この回答へのお礼

回答ありがとうございます!
すみません。jqueryとかjavascript自体使い始めて間もなく名前の意味とか何が出来るとか良くわからず質問してしまいました。

コールバックが何を意味してるかすらわからないので、filterは難しそうですね。
一応チャレンジしてみます。

参考URLまでありがとうございました。

お礼日時:2014/08/27 19:28

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の構文中でそのまま使用できます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます!
LINQですか・・・聞いたことないです(汗)
でも参考サイトを見るとなんか出来そうな気がするのでチャレンジしてみます!
ありがとうございます!

お礼日時:2014/08/27 19:34

> まだ並べ替えでしか試していないのですが、DBから取ってくると数秒かかるのですが配列の中身を並べ替えて再表示だと1秒もかからず一瞬で出来たので


それ、比較対処を間違えてませんか?

DB から並べ替え後のデータを取得する場合、当然ながら DB からのデータ送信というコストがかかります。
もしあなたが「配列の中身を並び替え」た時間の計測が並び替え前のデータを用意した時点から行っていたなら、それは DB からのデータ送信コストを計算に入れることを忘れています。
本気で DB での並べ替えと配列での並べ替えを比較したいのなら、配列側は DB から未並び替えのデータを取得するところから計測を始めなくてはいけません。
    • good
    • 0
この回答へのお礼

再び回答ありがとうございます。

比較対象が違うとかではなく、どちらが早いかだけです。
おっしゃる通り、「DB からのデータ送信というコスト」があるのでDBへのアクセスは1回だけにしたいのです。

現在、サイト開いた時の1回だけDBにアクセスしてデータを取って来ています。
その後の、並べ替えや条件表示の時にもう一度DBにアクセスするのではなく
取って来たデータで処理が出来れば早いと思い、どのように処理して良いか
分からないので質問させていただきました。

意図してる回答になっていなかったらすみません。

お礼日時:2014/08/28 00:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!