关于js去重和双循环对比相同的值动态生成数组并Push

1:去重
参数:data为数组里面多个对象
目的:data中方有多种类型题目并且多个,需要去重后,每个题目只需要重复的获取一个就可以

  //题目去重
                    let peons = data.reduce((cur,next) =>{
                        obj[next.typeName] ? '' : obj[next.typeName] = true &&cur.push(next)
                        return cur
                    },[])
                    let anwerType = []
                    peons.forEach(item =>{
                        anwerType.push(item.typeName)
                    })
                    

2:动态生成多个数组
首先anwerType和data进行两个循环,判断两个的typeName是否相同

		 let newList =[]
         let objs ={}
         anwerType.forEach(function(item,index){     
             data.forEach(function(e){
                 if(item == e.typeName) {      //判断是否相同
                     newList.push(e)
                     if(objs[e.typeName]){
                         objs[e.typeName].push(e)    //这里有几种题就输出多种数组
                     }else {    
                         objs[e.typeName] = []   //如果不同先置为空
                         objs[e.typeName].push(e)   //这里是为了将第一条数据存入,如果不要每		次循环都会少一条数据
                     }
                 }
             })
         })

这里是得到的objs的结果,obj的key就为typeName
在这里插入图片描述

再将objs循环,进行进一步判断

     for(var k in objs) {    //将对象循环   k为对象的键名
                        indexs++
                        newList.forEach(function(item) {
                            if(k == item.typeName) {  //判断键名等于typeName时
                                let length = objs[item.typeName].length    //获取每个相同typeName的数组的长度
                                let score = objs[item.typeName][0].score    //获取每一题的分数
                                let result = Number(objs[item.typeName][0].score )  * score //获取总分数
                                item.titleName=`
                                ${titlesNum[indexs-1]}${item.typeName}(共${length}题,每题${score}分,共计${result}分)
                                `
                            }
                        })
                    }

结果:

 一、A1型题(共11题,每题1分,共计11分)
  二、A2型题(共9题,每题1分,共计9分)
  三、A3/A4型题(共6题,每题1分,共计6分)
  ............
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值