关于#微信小程序云开发#的问题,如何解决?

用小程序云开发将用户完成的问卷传到了云数据库上 如下图answer数组中bh是题号 sel是选的选项
我要怎么实现对answer数组进行遍历 找出哪些人的问卷里选了超过2个C 并在页面打印出这些用户的信息
看官方文档的示例并不是很懂

img

预期是选择问卷后底下能出现符合以上条件的问卷所填的用户的信息

img

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
首先,你需要获取到云数据库中存储的所有用户的问卷信息,可以使用小程序云开发提供的cloud.callFunction方法,创建一个云函数来获取云数据库中存储的用户问卷信息。具体步骤如下:

  1. 创建云函数
    在小程序开发者工具中,右键点击云函数文件夹,选择创建并部署一个新的云函数,可以取名为getUserAnswer

  2. 编写云函数代码
    getUserAnswer文件夹中打开index.js文件,编写云函数代码。以下是一个简单的示例代码:

// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()

// 云函数入口函数
exports.main = async(event, context) => {
  const db = cloud.database()
  const result = await db.collection('user_answer').get()
  return result.data
}

这个云函数会查询云数据库中名为user_answer的集合,并返回所有记录的数据数组。

  1. 调用云函数
    在小程序页面中,可以使用以下代码调用上述的云函数,并获取到云数据库中的所有用户填写的问卷:
wx.cloud.callFunction({
  name: 'getUserAnswer',
  success: res => {
    console.log('用户问卷信息:', res.result)
    // 在成功回调中进行处理
  },
  fail: console.error
})

接下来,你需要遍历这个数组,找到所有选了超过两个"C"选项的用户,并将其信息打印在页面上。

可以使用Array.prototype.forEach()方法遍历数组并查找符合条件的用户信息。以下是参考代码:

wx.cloud.callFunction({
  name: 'getUserAnswer',
  success: res => {
    const answerList = res.result
    let userList = []
    answerList.forEach(answer => {
      let cCount = 0
      answer.answer.forEach(item => {
        if (item.sel === 'C') {
          cCount++
        }
      })
      if (cCount > 2) {
        userList.push({
          name: answer.name,
          gender: answer.gender,
          age: answer.age
        })
      }
    })
    console.log('符合条件的用户信息:', userList)
    // 可以通过setData()方法更新页面数据
  },
  fail: console.error
})

在上述代码中,首先遍历云数据库中所有的用户问卷信息,累计每个用户选了多少个"C"选项,如果超过了2个,就将该用户的姓名、性别和年龄信息添加到一个数组中。遍历完成后,就可以得到所有符合条件的用户信息,可以使用setData()方法将其绑定到页面数据中。
如果我的回答解决了您的问题,请采纳!

基于最新版ChatGPT4的回答,望采纳!!!有其他问题也可以询问我哦💕(最新版更智能,功能更加强大):
根据您的描述,您需要遍历云数据库中的问卷数据,找出选择了超过2个C选项的用户,并在页面上打印这些用户的信息。您可以按照以下步骤实现这个功能:

首先,从云数据库中获取问卷数据。您可以使用小程序云开发提供的API来实现这一操作。例如:

const db = wx.cloud.database()
const questionnaireCollection = db.collection('questionnaire')

questionnaireCollection.get().then(res => {
  console.log(res.data)
})

遍历获取到的问卷数据,筛选出选择了超过2个C选项的用户。您可以使用JavaScript的filter函数来实现这一操作。例如:

const filteredUsers = res.data.filter(user => {
  const answers = user.answer
  const cCount = answers.reduce((count, answer) => {
    return count + (answer.sel === 'C' ? 1 : 0)
  }, 0)
  return cCount > 2
})


将筛选出的用户信息显示在页面上。您需要在小程序的WXML模板中创建一个列表,并将筛选出的用户数据绑定到该列表。例如,在WXML中添加以下代码:

<view wx:for="{{filteredUsers}}" wx:key="index">
  <text>{{item.userInfo.nickName}}</text>
  <text>{{item.userInfo.gender}}</text>
  <!-- 在此处添加其他用户信息 -->
</view>



在JavaScript中,将筛选出的用户数据设置为页面的数据:

this.setData({
  filteredUsers: filteredUsers
})


通过以上步骤,您可以实现在页面上显示选择了超过2个C选项的用户信息。请注意,这里的代码示例仅供参考,您可能需要根据您的小程序结构和数据结构进行适当的调整。

你可以定一个 方法来获取所有选C超过2个的:

pageData.forEach(function(item, index){  #pageData是查询出来的所有用户的问卷数据
       console.log(item); //这里的item就是从数组里拿出来的每一个每一组
       const count = 0
      item.answer.forEach(function(ans, index_ans){
               if(ans.sel=='C'){
                 count  = count +1
              }
          })
        if(count>=2){//如果选择C的超过2个则添加到全局的用户数组中
            this.data.userList.add(item.name)
        }
       })
})

当然,你需要在data中定义存储筛选出来的用户:userList
然后你的页面绑定userList循环展示用户的信息即可:


<view wx:for="{{userList}}" wx:key="index">
       {{item}}
</view>