2017-09-07 34 views
0

我試圖顯示一個數組中的消息在Vue中的過濾器方法中是空的。 但是,似乎我的計算函數仍然返回一個空對象數組(如果我搜索的東西不存在)這個數組爲什麼不是空的?

我希望它只返回實際上有一個值的對象 - 應該過濾空的對象出來嗎?

因此,如果我搜索「fjhdsfjsdfjsd」前,它仍然返回約200項,只是空的對象,它不應該?

計算的功能是這樣的:

filteredAlarms: function() { 

    let filter = {}; 
    let searchString = this.search_string.toLowerCase(); 

    Object.keys(this.eventLog).forEach(key => { 
     filter[key] = this.eventLog[key].filter(item => { 
     let systemName = item.system_name.toLowerCase(); 
     if(item.type.includes("alarm") && systemName.includes(searchString)) { 
      return item; 
     } 
     }); 
    }); 

    return filter 

    }, 
+0

請注意,'.filter'回調應該返回一個布爾值。總是。有時候不是一個項目,有時還沒有定義。 – Bergi

+0

您能提供一些示例輸入和輸出嗎?你的代碼應該返回一個空數組的對象,而不是相反。 – Bergi

回答

0

試試這一個。我希望這會起作用。

filteredAlarms: function() { 

    let filter = {}; 
    let searchString = this.search_string.toLowerCase(); 

    Object.keys(this.eventLog).forEach(key => { 
     filter[key] = this.eventLog[key].filter(function(item){ 
     return item.type.includes("alarm") && item.system_name.toLowerCase().includes(searchString); 
     }); 
    }); 

    return filter 

    }, 
1

Array.prototype.filter必須返回一個布爾值。只是刪除ifreturn item部分,就回到你的,如果條件:

filteredAlarms: function() { 
    let searchString = this.search_string.toLowerCase(); 
    let eventKeys = Object.keys(this.eventLog); 

    return eventKeys.reduce((filter, key) => { 

    let items = this.eventLog[key].filter(item => { 
     let systemName = item.system_name.toLowerCase(); 
     return item.type.includes("alarm") && systemName.includes(searchString); 
    }); 

    return Object.assign(filter, { [key]: items }); 
    }, {}); 
}