我试图在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 :(得分:1)
Array.prototype.filter 必须返回一个布尔值。只需删除if
和return item
部分,然后只返回if条件:
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 });
}, {});
}
答案 1 :(得分: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
},