消防安全知识答题活动小程序v4.2.0
v4.2.0
1)JavaScript-数组乱序
数组乱序在实际开发过程中是可能碰到的,比如消防安全知识答题活动小程序中实现乱序抽题或者选项乱序。
我们一开始可能会想到利用数组的sort方法,判断随机出来的0-1的值与0.5的大小,实现排序。该方法实现如下:
var arr = [1, 2, 3, 4, 5, 6];
arr.sort(function(){
return Math.random() - 0.5;
});
console.log(arr)
上面的实现方法看起来很完美地实现了乱序的需求,但实际的效果如何我们还是要进行测试。
但要实现真正意义上的乱序,这就要提到经典的洗牌算法Fisher–Yates_shuffle。简单的说:就是随机抽一个放到最后。把剩余的数继续抽,继续放到次后......依次执行。
function shuffle(array) {
var j, x, i;
for (i = array.length; i; i--) {
j = Math.floor(Math.random() * i);
x = array[i - 1];
array[i - 1] = array[j];
array[j] = x;
}
return array;
}
2)实现选项乱序
按照这个思路和技术方案,先写一段功能代码实现看看,测试调试一下。
js代码:
onLoad: function (options) {
// ......省略
let count = this.generateArray(0, this.data.questionList.length - 1);
this.setData({
shuffleIndex: this.shuffle(count).slice(0, 10) // 生成随机题序并进行截取
})
},
/*
* 数组乱序/洗牌
*/
shuffle: function (arr) {
var j, x, i;
for (i = array.length; i; i--) {
j = Math.floor(Math.random() * i);
x = array[i - 1];
array[i - 1] = array[j];
array[j] = x;
}
return array;
},
/**
* 生成一个从 start 到 end 的连续数组
*/
generateArray: function (start, end) {
return Array.from(new Array(end + 1).keys()).slice(start)
},
v4.1.0
1)支持多选题
2)支持填空题
v3.0.0
1)升级功能:
- 答题页、结果页界面,增加展示微信头像和昵称栏目√
- 由仅支持单选,升级为支持单选、判断、多选题型 √
- 排行榜页排名机制,优化为取个人最佳成绩进行排名√
- 各界面及功能一些小优化√
2)拓展功能:
- 注册登录页 √
- 错题集 √
- 题库学习 √
- 查看用户的答题成绩以及答题情况-管理员 √
- 查看所有用户的答题记录-管理员 √
- 后台题库管理系统-管理员 √
- 题目增删查改-管理员 √
3)基于v2.0拓展升级:
- 排行榜页
- 活动规则页
- 答题记录页
- 首页、答题页、结果页
- 微信授权登录
- 获取微信头像和昵称等
- 实现页面间跳转功能
- 实现转发分享答题成绩功能
- 题库随机抽题
- 查询历史成绩
- 实现用云开发实现查询题库功能
- 实现动态题目数据绑定
- 答题交互逻辑
- 切换下一题
- 系统自动判分
- 提交答卷保存到云数据库集合
- 答题结果页从云数据库查询答题成绩
- 题库学习
- 注册登录页
- 支持单选、判断题型
- 错题集
- 查看用户的答题成绩以及答题情况-管理员
- 查看所有用户的答题记录-管理员
- 后台管理-管理员
- 后台数据监控-管理员
v2.0.0
- 活动规则页
- 排行榜页
- 答题记录页
- 题库随机抽题
- 微信授权登录
- 获取微信头像和昵称等
- 首页、答题页、结果页
- 实现页面间跳转功能
- 实现转发分享答题成绩功能
- 实现用云开发实现查询题库功能
- 实现动态题目数据绑定
- 答题交互逻辑
- 切换下一题
- 系统自动判分
- 提交答卷保存到云数据库集合
- 查询历史成绩
- 答题结果页从云数据库查询答题成绩