请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

这是老师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是判断该分类下是否有图书,如果没有书,就不显示了

0 回复 有任何疑惑可以回复我~
  • 提问者 onjuju #1
    老师,那这第一个filter方法的生成出来的新数组要到哪里用呢?
    回复 有任何疑惑可以回复我~ 2019-02-19 14:46:23
  • Sam 回复 提问者 onjuju #2
    新数组是在列表页面使用的,就是搜过后跳转的列表页面
    回复 有任何疑惑可以回复我~ 2019-02-19 15:30:26
  • 提问者 onjuju 回复 Sam #3
    好的,谢谢老师
    回复 有任何疑惑可以回复我~ 2019-02-19 15:46:47
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信