老师,搜索算法这里为什么要用两个filter呢?

来源:7-20 书城列表页开发

onjuju

2019-02-18

这是老师StoreList.vue文件的getList的部分源代码

// 如果用户输入了关键字,则通过书名进行关键字匹配(搜索算法)
Object.keys(this.list).filter(key => {  // 
  this.list[key] = this.list[key].filter(book => book.fileName.indexOf(keyword) >= 0)
  return this.list[key].length > 0
})

我理解的是这里的 this.list 是通过mock接口拿到的所有分类下,所有书的一个对象数组,然后对这个对象的键名数组进行遍历,查出每个分类数组的名字是否与keyword匹配。
我不明白的对 Object.keys 进行filter时候,没有变量接收这个filter函数的返回值,那这里用filter的意义是什么呢?如果是用来控制Featured组件的循环数量,那就应该用另外一个变量来循环,这里的用于循环的list变量,即使它某个属性的数组长度为0,vue还是会循环出来。

麻烦老师帮我看看,谢谢老师!

写回答

1回答

Sam

2019-02-19

你好,Object.keys(this.list)的含义是获取所有的分类,数据结构类似下面这种:

{
  category1: [
    {
      id: 1,
      name: "book name"
    }
  ]
}

对象的key是图书的分类,value是一个数组,表示该分类下的所有图书

所以里面一个filter是过滤出关键字匹配的图书,第二个filter是判断该分类下是否有图书,如果没有书,就不显示了

0
3
onjuju
回复
Sam
好的,谢谢老师
2019-02-19
共3条回复

Vue 实战商业级读书Web APP完整项目

Vue全家桶+最新前端技术+前后端分离架构,完整项目流程

1610 学习 · 1951 问题

查看课程