2017-09-07 31 views
0

配列内にメッセージを表示しようとすると、Vueのフィルタメソッドで空になります。 しかし、私の計算された関数はまだ空のオブジェクトの配列を返します(もし私がそこに何かを検索する場合)この配列が空でないのはなぜですか?

私はそれが実際に値を持つオブジェクトを返すだけです - 空のものはフィルタリングする必要がありますでる?

私が "fjhdsfjsdfjsd" exを検索すると、それでも約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

はこの1つを試してみてください。私はこれがうまくいくことを望みます。

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 }); 
    }, {}); 
} 
関連する問題