Excelテーブルで、ある列にフィルターを設定すると、別の列などに関係のないフィルターオプションがフィルターされます。
しかし、Excelがこれを行うために使用するアルゴリズムと、JSの実装があるかどうかを知る必要があります。
新しいフィルターが適用されているときに各列の一意の値のリストを更新しようとしましたが、このアプローチでは、前のフィルター列で選択されていないオプションが失われます。Excelはどういうわけかそれらを維持することができます。
この質問は似ていますが、特定の実装について尋ねます。必要なのはアルゴリズム、または少なくともその名前です。フィルタリングのようなAngular JSExcelです。
現在の実装の擬似コード:
var allRows: {[columnKey]: string}[]
var visibleRows: {[columnKey]: string}[]
var filterColumns: {[columnKey]: string[]}
var columns: { columnKey: string }[]
var uniqueValues: {[columnKey]: string[]}
/* when header menu opens it gets unique values
from the column as filter options */
function getHeaderValues(columnKey): string[] {
return uniqueValues[columnKey]
}
/* when user applies filter this function is being called
to update visible rows and unique values */
function setFilter(filterColumn: string, values: string[]) {
filterColumns = {
...filterColumns,
[filterColumn]: values
}
visibleRows = getRows(allRows, filterColumns)
uniqueValues = updateUniqueValues(columns, visibleRows)
}
このようなアルゴリズムの基本的な考え方は、各フィルターが現在利用可能なデータに基づいて計算されるということです。フィルタが適用されると、他のフィルタは現在使用可能な値の新しいセットに基づいて再計算します。次のデータを検討してください。
FOO BAR
===========
1 1
1 2
2 3
2 4
FOOのフィルターの値は1、2になり、BARのフィルターの値は1、2、3、4になります。FOOを1にフィルタリングすると、シートには次のように表示されます。
FOO BAR
===========
1 1
1 2
そして、すべてのフィルターで使用可能な値を再計算します。これで、BARの値は1,2のみであることがわかります。
さらに明確にするために編集:
1。初期フィルター:完全なデータからのすべての列
2.列Aをフィルターします。列Aは再計算されませんが、他のすべての列は
3です。フィルター列B:列Bは再計算されませんが、列Aは
4です。したがって、データが表示されないフィルターをクリックすることはできません
。5。ステップ4では、列Aをすべてでフィルターするオプションが失われますが、それは良いことです。Bにあるフィルターを指定すると、使用できないものでAをフィルター処理できないためです。これにより、セットが空になりますが、この反復アプローチを使用してフィルターを再計算することで防止できます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加