老师,搜索算法这里为什么要用两个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回答
-
你好,Object.keys(this.list)的含义是获取所有的分类,数据结构类似下面这种:
{ category1: [ { id: 1, name: "book name" } ] }
对象的key是图书的分类,value是一个数组,表示该分类下的所有图书
所以里面一个filter是过滤出关键字匹配的图书,第二个filter是判断该分类下是否有图书,如果没有书,就不显示了
032019-02-19
相似问题