当前位置: 首页 > news >正文

微信小程序项目实战遇到的问题

我们以学生成绩平台来作为例子。这是我们想得到的效果。

以下是完整代码:

index.js

// index.js
Page({//页面的初始数据data: {hello: '欢迎进入微信小程序的编程世界',score: 80,userArray: [{name: '张三',score: [66, 77, 86, 70, 90]},{name: '李四',score: [88, 76, 95, 84, 85]},{name: '王二',score: [80, 75, 90, 65, 59]},{name: '麻子',score: [82, 58, 75, 45, 57]}],userIndex: -1, // 初始化为-1,表示还没有找到第一名totalScore: 0, // 初始化为0,表示还没有找到总分},modifyScore: function () {this.setData({score: 100});},modifyScore60: function () {for (var i = 0; i < this.data.userArray.length; i++) {for (var j = 0; j < this.data.userArray[i].score.length; j++) {var score = this.data.userArray[i].score[j];if (score >= 58 && score < 60) {this.setData({["userArray[" + i + "].score[" + j + "]"]: 60});}}}console.log(this.data.userArray);},getFirstTotalScoreIndex: function () {var index = -1;var maxScore = -Infinity;for (var i = 0; i < this.data.userArray.length; i++) {var user = this.data.userArray[i];if (Array.isArray(user.score)) {    //检查是否是数组var sum = user.score.reduce((acc, cur) => acc + cur, 0);  //当我们执行 user.score.reduce((acc, cur) => acc + cur, 0); 时,它会对数组中的每个元素执行累加操作:if (sum > maxScore) {maxScore = sum;index = i;}}}return index;},getFailingStudents: function () {var FAIL_SCORE_THRESHOLD = 60;var failingStudents = [];this.data.userArray.forEach((user, index) => {            //forEach 方法遍历这个数组var failingCourses = user.score.filter(score => score < FAIL_SCORE_THRESHOLD);  //箭头函数作为 filter 方法的参数,它指定了一个条件。    //它的意思是对于数组中的每个元素 score,只有当 score 的值小于 FAIL_SCORE_THRESHOLD 时,该元素才会被保留到新数组 failingCourses 中。if (failingCourses.length > 0) {failingStudents.push({ name: user.name, count: failingCourses.length });  //每次循环就把东西传入到挂科的同学}});return failingStudents;},onLoad: function (options) {var firstIndex = this.getFirstTotalScoreIndex();if (firstIndex !== -1) {var totalScore = this.data.userArray[firstIndex].score.reduce((acc, cur) => acc + cur, 0);this.setData({userIndex: firstIndex,totalScore: totalScore,});}var failingStudents = this.getFailingStudents();this.setData({failingStudents});},//其他生命周期函数和事件处理函数...
});

index.wxml

<view>{{hello}}</view>
<view>你希望小程序考{{score}}分。
</view>
<button bindtap="modifyScore">修改分数</button>
<button bindtap="modifyScore60">改58、59为60</button><view><text>班级第一名:{{userArray[userIndex].name}}, 总分:{{totalScore}}</text>
</view><view><!-- 显示挂科学生信息 --><block wx:for="{{failingStudents}}" wx:key="index"><text>有挂科的同学:{{item.name}},有{{item.count}}门课挂科。</text></block><!-- 如果没有挂科学生,显示相应信息 --><text wx:if="{{failingStudents.length === 0}}">没有学生挂科。</text>
</view>

理清楚它为什么这么写。

user.score是分数的数组,比如[66, 77, 86, 70, 90]

先介绍一下reduce((acc, cur) => acc + cur, 0)   

        对于数组中的每个元素,回调函数中的acc表示累加器,pcur表示当前元素。初始值0被作为第一次调用回调函数时的累加器的值。  总而言之,该行代码会返回数组[66, 77, 86, 70, 90]的总和。

filter 方法在使用回调函数的过程中,遍历数组的每个元素,并返回满足条件的元素组成的新数组。

score => score < 60 是一个箭头函数作为 filter 方法的参数,它指定了一个条件。它的意思是对于数组中的每个元素 score只有当 score 的值小于 FAIL_SCORE_THRESHOLD 时,该元素才会被保留到新数组 failingCourses 中。

还有一点,在调用方法的时候,不是像python、c一样的逻辑,需要在本页面找寻方法,使用this

还有,failingStudents是一个数组。通过 wx:for="{{failingStudents}}" 循环遍历这个数组。

在这种情况下,item 是在 wx:for 循环中当前迭代的对象,在这种情况下,item 是在 wx:for 循环中当前迭代的对象。

因此,item.name 实际上表示当前迭代对象(学生对象)的 name 属性,即当前学生的名字。

相关文章:

  • 详细分析Python模块中的雪花算法(附模板)
  • Django框架的全面指南:从入门到高级【第128篇—Django框架】
  • 24计算机考研调剂 | 温州大学
  • C# 连接neo4j数据库,包括非默认的neo4j默认库
  • 基于ssm+layui的图书管理系统
  • C语言分析基础排序算法——归并排序
  • jwt以及加密完善博客系统
  • 第八阶段:uni-app小程序 --首页开发(2)
  • macOS - 获取硬件设备信息
  • 分布式ID(8):分布式ID生成方法
  • 【测试知识】业务面试问答突击版3---bug、测试用例设计
  • [蓝桥杯 2015 省 B] 生命之树
  • Python和Java哪一个更适合初学者?
  • 比特币,区块链及相关概念简介(二)
  • 数据结构的概念大合集02(线性表)
  • 2017 年终总结 —— 在路上
  • Android Studio:GIT提交项目到远程仓库
  • chrome扩展demo1-小时钟
  • isset在php5.6-和php7.0+的一些差异
  • Java的Interrupt与线程中断
  • LintCode 31. partitionArray 数组划分
  • React Transition Group -- Transition 组件
  • spring cloud gateway 源码解析(4)跨域问题处理
  • Vue UI框架库开发介绍
  • 爱情 北京女病人
  • 聚簇索引和非聚簇索引
  • 聊聊flink的BlobWriter
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 如何优雅地使用 Sublime Text
  • 使用Swoole加速Laravel(正式环境中)
  • 试着探索高并发下的系统架构面貌
  • 因为阿里,他们成了“杭漂”
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 自制字幕遮挡器
  • AI算硅基生命吗,为什么?
  • Spring第一个helloWorld
  • 说说我为什么看好Spring Cloud Alibaba
  • ​io --- 处理流的核心工具​
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #AngularJS#$sce.trustAsResourceUrl
  • #控制台大学课堂点名问题_课堂随机点名
  • (1)Nginx简介和安装教程
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (过滤器)Filter和(监听器)listener
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (学习日记)2024.01.09
  • (一)为什么要选择C++
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)linux下的时间函数使用
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • (轉)JSON.stringify 语法实例讲解
  • .gitignore