24

次のようなオブジェクトの膨大な (1000 以上) リストがあるとします。

[{name: 'john dow', age: 38, gender:'m'}, {name: 'jane dow', age: 18, gender:'f'}, ..]

このリストを名前で(文字ごとに)フィルタリングしたい。

filter('j') => [{name: 'john dow', age: 38, gender:'m'}, {name: 'jane dow', age: 18, gender:'f'}, ..]

filter('jo') => [{name: 'john dow', age: 38, gender:'m'}, ..]

filter('dow') => [{name: 'john dow', age: 38, gender:'m'}, {name: 'jane dow', age: 18, gender:'f'}, ..]

それを行うための最高のパフォーマンスの方法は何ですか? RegEx は明らかにキーの 1 つです。ユーザーが通常最初から名前を開始する傾向があると想定する場合は、事前にリストを並べ替えるのも良い考えかもしれませんが、それが役立つのは場合によってだけです。

フィルターをマッピングするための JavaScript 組み込み関数はありますか? それらは JavaScript の実装よりも高速であると期待しています。

PS: はい、「オフライン機能」を提供したいので、クライアント側でフィルタリングしたいと思います。

4

5 に答える 5

4

この場合、パフォーマンスについてはあまり心配しません。デスクトップ コンピューターは、1000 回または 10,000 回の評価を汗をかかずに消費する必要があります。機能を壊すリスクは、わずかに効率的な処理の利点よりもおそらく高いため、あらゆる種類の複雑な最適化は避けます。

Javascript (ECMAScript 5) は、配列をフィルタリングするための新しいメソッドを提供します。ネイティブメソッドとしては、少し高速になるはずです。

var regex = ...

results = json.filter(function(result) {
   return regex.test(result.name)
}

Array.prototype.filter は最新のブラウザーでサポートされています。 http://kangax.github.com/es5-compat-table/を参照してください。古いブラウザ用のパッチは、 https ://github.com/kriskowal/es5-shim で追加できます。

于 2012-11-26T13:42:50.770 に答える