为什么这个数组不是空的?

时间:2017-09-07 09:46:51

标签: javascript ecmascript-6 vue.js

我试图在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

  },

2 个答案:

答案 0 :(得分:1)

Array.prototype.filter 必须返回一个布尔值。只需删除ifreturn 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

  },