抽奖结果数据json格式数据拼接bug,如下图,只发布了两个奖项,每个奖项设置2个奖品,但最后拼接数据的时候出现3个奖项



json数据格式如下

"luckyResult":[
{
"award":{
"lucky_award_id":60,
"award_name":"分别抽一个小哥哥小姐姐谈一次3天的CP",
"award_amount":"2"
},
"users":[
{
"uid":324,
"avatar_url":"https://wx.qlogo.cn/mmopen/vi_32/jqsfXOjzy4riaLGAJArphqtLMvRjRvV1CVTod8wgqZFOOyPquk8WzHSHeA3MhJpEjD4lXykAZS3Guq7UiavhqtUQ/132",
"nickname":"上天啦¿"
},
{
"uid":362,
"avatar_url":"https://wx.qlogo.cn/mmopen/vi_32/kYfZ5WLNF6VbV4eeMJppav18wKoTrTPADkQrqxbAMYu1EB6XDXwpto8BvibYRrJX7kDJePvwUqjMCfghf3nbVuA/132",
"nickname":"Er"
}
]
},
...]

html页面

<div class="lucky-person-title" v-if="data.status==1">中奖者名单</div>
<ul class="lucky-award-list">
<li class="lucky-award-item" v-for="(luckyItem,luckyIndex) in data.luckyResult" :key="luckyIndex">
<div class="lucky-award-name">奖品:{{luckyItem.award.award_name}}x{{luckyItem.award.award_amount}}</div>
<ul class="award-person">
<li class="award-person-item" v-for="(userItem,userIndex) in luckyItem.users" :key="userIndex">
<img class="award-person-avatar" :src="userItem.avatar_url" alt="">
<div class="award-person-nickname">{{userItem.nickname}}</div>
</li>
</ul>
</li>
</ul>

拼装js逻辑

// 获取抽奖结果
let luckyResult = [];
let luckyRecord = await this.LuckyService.luckyRecordList(lucky_id);
luckyRecord.forEach((item,index) => {
let user = { uid: item.uid,avatar_url: item.avatar_url, nickname: item.nickname };
if (luckyResult.length>0){
console.log('luckyResult.length', index,luckyResult.length)
luckyResult.forEach(ele => {
// 相同奖品,则将用户归类到一起
if (item.lucky_award_id == ele.award.lucky_award_id) {
ele.users.push(user);
} else {
let obj = { award: { lucky_award_id: item.lucky_award_id, award_name: item.award_name, award_amount: item.award_amount }, users: [user] };
luckyResult.push(obj);
}
});
}else{
let obj = { award: { lucky_award_id: item.lucky_award_id, award_name: item.award_name, award_amount: item.award_amount }, users: [user] };
luckyResult.push(obj);
}
});
result.luckyResult = luckyResult;

问题分析:

主要问题出现在这个地方

luckyResult.forEach(ele => {
// 相同奖品,则将用户归类到一起
if (item.lucky_award_id == ele.award.lucky_award_id) {
ele.users.push(user);
} else {
let obj = { award: { lucky_award_id: item.lucky_award_id, award_name: item.award_name, award_amount: item.award_amount }, users: [user] };
luckyResult.push(obj);
}
});

在对luckyResult进行遍历的时候,当luckyResult的长度大于1的时候,遍历了两次,所以一个用户会出现两个结果

解决办法 :

应该是先遍历每个奖项,再遍历抽奖记录列表,然后判断奖项id相等时将这个user对象push到奖项对象的users里面

// 获取抽奖结果
let luckyResult = [];
let luckyRecord = await this.LuckyService.luckyRecordList(lucky_id);
if (luckyRecord.length>0){
awards.forEach((item, index) => {
console.log('item', item)
let award = { award: { lucky_award_id: item.lucky_award_id, award_name: item.name, award_amount: item.amount }, users: [] }
luckyRecord.forEach((item2, index2) => {
if (item.lucky_award_id == item2.lucky_award_id) {
let user = { uid: item2.uid, avatar_url: item2.avatar_url, nickname: item2.nickname }
award.users.push(user);
}
})
luckyResult.push(award);
});
}
result.luckyResult = luckyResult;

抽奖结果显示正常

小程序开发笔记【二】,抽奖结果json数据拼装bug解决的更多相关文章

  1. 微信小程序学习笔记二 数据绑定 + 事件绑定

    微信小程序学习笔记二 1. 小程序特点概述 没有DOM 组件化开发: 具备特定功能效果的代码集合 体积小, 单个压缩包体积不能大于2M, 否则无法上线 小程序的四个重要的文件 *js *.wxml - ...

  2. WordPress版微信小程序开发系列(二):安装使用问答

    自WordPress版微信小程序发布开源以来,受关注的程度超过我原来的想象.这套程序主要面对的用户是wordpress网站的站长,如果wordpress站想在微信的生态圈得到推广,小程序成为一种重要的 ...

  3. 微信小程序开发(二)----- 云开发

    1.概念 微信小程序的云开发是腾讯云与微信团队深度合作推出的一个全新的小程序的解决方案,它提供了云函数.云数据库与云存储这三大基础能力支持,随着云开发的出现,小程序的开发者可以将服务端的部署和运营的环 ...

  4. 微信小程序开发笔记(一)

    一.为什么要学习微信小程序开发 微信小程序是一个可以在微信上打开的轻应用,他是由多个页面组成的程序,跟传统APP比较如下: 优点 1.不需要在应用商店下载,不占用内存空间,即开即用 2.可以在微信内直 ...

  5. 微信小程序开发(二)认识开发工具

    腾讯微信团队提供非常优秀的微信小程序开发工具,大大降低了开发者的入门门槛,为他们点赞!上一篇文章已经说明了,如何注册及下载开发工具,现在我们就来一起认识见识一下开发工具的庐山真面目. 首次打开这个开发 ...

  6. 微信小程序开发系列二:微信小程序的视图设计

    大家如果跟着我第一篇文章 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 一起动手,那么微信小程序的开发环境一定搭好了.效果就是能把该小程序的体验版以二维码的方式发送给其他朋友使用. 这个系列 ...

  7. 微信小程序开发笔记02

    今天学习了微信小程序开发用到的语言,wxml与wxss语言基本语法与html和css基本语法相似,学习起来相对简单.在小程序主要的语言是js(javascript,跟准确的说是jqery) ,由于这种 ...

  8. 微信小程序开发笔记01

    微信小程序开发的优势 1,不用安装,即开即用,用完就走.省流量,省安装时间,不占用桌面: 2,体验上虽然没法完全媲美原生APP,但综合考虑还是更优: 3,对于小程序拥有者来说,开发成本更低,他们可以更 ...

  9. [转]微信小程序开发(二)图片上传+服务端接收

    本文转自:http://blog.csdn.net/sk719887916/article/details/54312573 文/YXJ 地址:http://blog.csdn.net/sk71988 ...

随机推荐

  1. HDOJ4768(二分区间)

    Flyer Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  2. Oracle存储过程返回

    IF IN_DN_NUMBER IS NOT NULL THEN SELECT COUNT(*) INTO V_HAS FROM SALEFROMSTORE WHERE ORDERID = IN_DN ...

  3. Spring Boot整合Rabbitmq

    Spring Boot应用中整合RabbitMQ,并实现一个简单的发送.接收消息的例子来对RabbitMQ有一个直观的感受和理解. 在Spring Boot中整合RabbitMQ是一件非常容易的事,因 ...

  4. TCG卡牌游戏研究:《炉石战记:魔兽英雄传》所做的改变

    转自:http://www.gameres.com/665306.html TCG演进史 说到卡牌游戏,大家会联想到什么呢? 是历史悠久的扑克牌.风靡全球的<MTG 魔法风云会>与< ...

  5. [置顶] 都是类型惹的祸——小心unsigned

    正如我们所知道的,编程语句都有很多的基本数据类型,如char,inf,float等等,而在C和C++中还有一个特殊的类型就是无符号数,它由unsigned修饰,如unsigned int等.大家有没想 ...

  6. [我的CVE][CVE-2017-15709]Apache ActiveMQ Information Leak

    问题原因: Apache ActiveMQ默认消息队列61616端口对外,61616端口使用了OpenWire协议,这个端口会暴露服务器相关信息,这些相关信息实际上是debug信息. 会返回应用名称, ...

  7. 通过phpMyAdmin拿webshell

    general_log默认为关闭的,root权限开启后,general_log_file会保存所有的查询语句 所以可以开启general_log,然后设置general_log_file为一个php文 ...

  8. 第十五章 深入分析iBatis框架之系统架构与映射原理(待续)

    iBatis框架主要的类层次结构 iBatis框架的设计策略 iBatis框架的运行原理 iBatis框架对SQL语句的解析 数据库字段映射到Java对象 示例运行的结果 设计模式解析之简单工厂模式 ...

  9. Java堆初始大小的建议值

    摘自:<Java Performance>第三章 Initial Heap Space Size Configuration This section describes how to u ...

  10. javascript——对象的概念——内建对象

    包括内建对象的所有对象都是Object对象的子对象. 1.Array():构建数组的内建构造器函数 例:创建数组方式有两种: 2.Boolean:是对象,与基本数据类型 布尔值 不相同 例:创建Boo ...