cra2ybeans 2023-01-12 17:25 采纳率: 50%
浏览 19
已结题

请教!在小程序中如何在多个数组中找到匹配的文字并生成一个新数组?

本人零基础,在微信小程序开发中,想在搜索页面显示关键词,设想当用户输入某个关键词(比如“大学”)的时候,能弹出相应的关键词,点击之后就可以按照弹出的关键词进行搜索。

目前通过调取数据库的数据,已经拿到符合条件的集合,然后通过.map拿到集合中的标签tags:

click_search() {
    var key = this.data.key  // 用户输入的搜索内容
    db.collection('demo')
      .where(_.or([{
        title: db.RegExp({
          regexp: key,
          options: 'i'
        })
      }, {
        tags: db.RegExp({
          regexp: key,
          options: 'i'
        })
      }]))
      .get()
      .then(res => {
        var key = [this.data.key]  // 将关键词从字符串转为数组
        if (wx.getStorageSync('historyStorage').length > 0) {  // 如果以前有搜索历史,那么将搜索历史进行拼接
          wx.setStorageSync('historyStorage', key.concat(wx.getStorageSync('historyStorage')))
        } else {  // 如果没有,将目前输入的搜索内容存到本地缓存
          wx.setStorageSync('historyStorage', key)
        }
        if (res.data.length == 0) {  // 如果用户输入的内容没有搜索结果,
          this.setData({
            Noresult: true,  // 显示无搜索结果
            showhistory: false
          })
        } else {  // 否则 将结果存入data进行渲染
          this.setData({
            search_list: res.data,
          })
        }
      })
  },

        var arr = search_list
        var newArr = arr.map((item) => {
          return item.tags
        })
     console.log(newArr)
      })

拿到的tags内容如下:

      0:[“杭州大学”,“西安大学”,“南京大学”]
      1:[“长沙大学”,“财经学院”,“贵阳学院”]
      2:[“武汉农大”,“湘潭大学”,“中南民院”]
      3:[“西南科技大学”,“东北体育学院”,“中央民院”]
      4:[“江西师大”,“西南理工学院”,“东北科技学院”]

尝试使用filter和将变量引入正则表达式的方法来,但是失败了。不知道是方法错了,还是正则表达式引入变量的时候错了……

data:{
 key:"大学”
}
var keywords = this.data.key
        var reg = new RegExp(+keywords, "gi")
        var result = newArr.filter(function (reg) {
          
          return result
        })
        console.log(result)

// 打印出来的 resul 为空数组

想请教一下,这种情况应该用什么方法比较好,最后能得出一个匹配的数组在页面渲染出来。

  • 写回答

1条回答 默认 最新

  • 流比 2023-01-12 23:54
    关注

    要在多个数组中找到匹配的文字并生成一个新数组,可以使用Array.prototype.concat()方法将所有数组合并成一个大数组,然后使用Array.prototype.filter()方法过滤出包含特定文字的元素。

    可以使用 Array.prototype.flat() 将嵌套的数组打平,然后使用 Array.prototype.filter() 方法来过滤出符合条件的元素。

    示例代码如下:

    let arr = search_list.flat();
    let newArr = arr.filter(item => {
        return item.includes(key)
    });
    console.log(newArr)
    

    上面的代码中,search_list 是你要查找的数组,key是你要查找的文字

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月21日
  • 已采纳回答 1月13日
  • 创建了问题 1月12日

悬赏问题

  • ¥15 用lstm来预测股票价格
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上