我對這個項目使用vuejs,但這個問題不一定是連接的 - 但如果有vue-way,我更喜歡這樣。vuejs - 基於多個過濾器緩存表的搜索結果
我正在建立一個表格,使用戶可以擁有每列過濾器(在這種情況下,簡單的input
s)。這些列是動態的,數據量也是如此(數千行,但少於100.000個條目)。
// example data
var columns = ['id', 'title', 'date', 'colour']
var data = [{ id: 1, title: 'Testentry 1', date: '2017-02-21T07:10:55.124Z', colour: 'green'}]
這裏的問題是:我遍歷列,如果搜索輸入存在檢查,如果是這樣,我試圖篩選基礎上,SEARCHQUERY數據。在ID的情況下,時間複雜度爲O(n)
。如果我還需要額外搜索標題,則可以重新使用第一個搜索查詢的結果,從而大大減少必須查看的數據量。
的searchqueries被存儲在對象search
,將過濾數據是計算屬性,即得到每當search
變化更新。儘管如此,但如果我更改title
的searchquery,它將重新評估searchquery,即使對於ID,儘管searchquery沒有改變。
這需要對每列的數據進行某種緩存。只有前面的欄需要被查詢。
編輯:用於過濾添加的代碼:
filteredRows() {
var rows = this.data
for (var i = 0; i < this.columns.length; i++) {
var column = this.columns[i].name
var search = this.tSearch[column]
if (!search && search.length === 0) continue
console.log(column + ': ' + ' (' + search + ') -> ' + rows.length)
rows = _.filter(rows, (row) => {
var value = '' + row[column]
value.search(search) > -1
})
}
return rows
}
我們可以看到您的計算屬性的代碼? – Justin
@Justin:當然,我只是加了它。 – Johannes