js对象数组属性合并的问题

在做一个题目选项的功能时,遇到这个合并的问题,题目有单选和多选,单选没问题,每题就一个答案,多选就会出现多个答案。选择结果类似下图:

https://img3.mukewang.com/5c0b74400001d64102750431.jpg

我需要把同一个多选题的数据合并成一个,就是图中蓝色框选部分的对象合并为一个,option变成"捏,挤",其他的Id不用管。有什么简单的方法实现。跪谢!

一只甜甜圈
浏览 756回答 1
1回答

蝴蝶刀刀

一个基本思路,先把数据遍历一遍,相同问题的题目存为一个数组,然后遍历处理相同题目的数组,将答案拼接即可。示例:数据:var questions = [{&nbsp; &nbsp; id: Math.random() * 100000 >> 0,&nbsp; &nbsp; option: 'x',&nbsp; &nbsp; questionId: 1,&nbsp; &nbsp; title: '你的名字'}, {&nbsp; &nbsp; id: Math.random() * 100000 >> 0,&nbsp; &nbsp; option: '动作1',&nbsp; &nbsp; questionId: 2,&nbsp; &nbsp; title: '你喜欢的动作'}, {&nbsp; &nbsp; id: Math.random() * 100000 >> 0,&nbsp; &nbsp; option: '动作2',&nbsp; &nbsp; questionId: 2,&nbsp; &nbsp; title: '你喜欢的动作'}, {&nbsp; &nbsp; id: Math.random() * 100000 >> 0,&nbsp; &nbsp; option: '动作3',&nbsp; &nbsp; questionId: 2,&nbsp; &nbsp; title: '你喜欢的动作'}, {&nbsp; &nbsp; id: Math.random() * 100000 >> 0,&nbsp; &nbsp; option: '动作4',&nbsp; &nbsp; questionId: 2,&nbsp; &nbsp; title: '你喜欢的动作'}, {&nbsp; &nbsp; id: Math.random() * 100000 >> 0,&nbsp; &nbsp; option: '动作5',&nbsp; &nbsp; questionId: 2,&nbsp; &nbsp; title: '你喜欢的动作'}, {&nbsp; &nbsp; id: Math.random() * 100000 >> 0,&nbsp; &nbsp; option: '歌曲1',&nbsp; &nbsp; questionId: 3,&nbsp; &nbsp; title: '你喜欢的歌曲'}, {&nbsp; &nbsp; id: Math.random() * 100000 >> 0,&nbsp; &nbsp; option: '歌曲2',&nbsp; &nbsp; questionId: 3,&nbsp; &nbsp; title: '你喜欢的歌曲'}, {&nbsp; &nbsp; id: Math.random() * 100000 >> 0,&nbsp; &nbsp; option: '歌曲3',&nbsp; &nbsp; questionId: 3,&nbsp; &nbsp; title: '你喜欢的歌曲'}];// 给相同题目分类// 给相同题目分类var categories = {};questions.forEach(function (item, i) {&nbsp; &nbsp; if (!categories[item.questionId]) {&nbsp; &nbsp; &nbsp; &nbsp; categories[item.questionId] = [item];&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; categories[item.questionId].push(item);&nbsp; &nbsp; }});console.log(JSON.stringify(categories, 0, 2));// {//&nbsp; &nbsp;"1": [//&nbsp; &nbsp; &nbsp;{//&nbsp; &nbsp; &nbsp; &nbsp;"id": 76350,//&nbsp; &nbsp; &nbsp; &nbsp;"option": "x",//&nbsp; &nbsp; &nbsp; &nbsp;"questionId": 1,//&nbsp; &nbsp; &nbsp; &nbsp;"title": "你的名字"//&nbsp; &nbsp; &nbsp;}//&nbsp; &nbsp;],//&nbsp; &nbsp;"2": [//&nbsp; &nbsp; &nbsp;{//&nbsp; &nbsp; &nbsp; &nbsp;"id": 42682,//&nbsp; &nbsp; &nbsp; &nbsp;"option": "动作1",//&nbsp; &nbsp; &nbsp; &nbsp;"questionId": 2,//&nbsp; &nbsp; &nbsp; &nbsp;"title": "你喜欢的动作"//&nbsp; &nbsp; &nbsp;},//&nbsp; &nbsp; &nbsp;{//&nbsp; &nbsp; &nbsp; &nbsp;"id": 19378,//&nbsp; &nbsp; &nbsp; &nbsp;"option": "动作2",//&nbsp; &nbsp; &nbsp; &nbsp;"questionId": 2,//&nbsp; &nbsp; &nbsp; &nbsp;"title": "你喜欢的动作"//&nbsp; &nbsp; &nbsp;},//&nbsp; &nbsp; &nbsp;{//&nbsp; &nbsp; &nbsp; &nbsp;"id": 25613,//&nbsp; &nbsp; &nbsp; &nbsp;"option": "动作3",//&nbsp; &nbsp; &nbsp; &nbsp;"questionId": 2,//&nbsp; &nbsp; &nbsp; &nbsp;"title": "你喜欢的动作"//&nbsp; &nbsp; &nbsp;},//&nbsp; &nbsp; &nbsp;{//&nbsp; &nbsp; &nbsp; &nbsp;"id": 25020,//&nbsp; &nbsp; &nbsp; &nbsp;"option": "动作4",//&nbsp; &nbsp; &nbsp; &nbsp;"questionId": 2,//&nbsp; &nbsp; &nbsp; &nbsp;"title": "你喜欢的动作"//&nbsp; &nbsp; &nbsp;},//&nbsp; &nbsp; &nbsp;{//&nbsp; &nbsp; &nbsp; &nbsp;"id": 70897,//&nbsp; &nbsp; &nbsp; &nbsp;"option": "动作5",//&nbsp; &nbsp; &nbsp; &nbsp;"questionId": 2,//&nbsp; &nbsp; &nbsp; &nbsp;"title": "你喜欢的动作"//&nbsp; &nbsp; &nbsp;}//&nbsp; &nbsp;],//&nbsp; &nbsp;"3": [//&nbsp; &nbsp; &nbsp;{//&nbsp; &nbsp; &nbsp; &nbsp;"id": 38775,//&nbsp; &nbsp; &nbsp; &nbsp;"option": "歌曲1",//&nbsp; &nbsp; &nbsp; &nbsp;"questionId": 3,//&nbsp; &nbsp; &nbsp; &nbsp;"title": "你喜欢的歌曲"//&nbsp; &nbsp; &nbsp;},//&nbsp; &nbsp; &nbsp;{//&nbsp; &nbsp; &nbsp; &nbsp;"id": 50039,//&nbsp; &nbsp; &nbsp; &nbsp;"option": "歌曲2",//&nbsp; &nbsp; &nbsp; &nbsp;"questionId": 3,//&nbsp; &nbsp; &nbsp; &nbsp;"title": "你喜欢的歌曲"//&nbsp; &nbsp; &nbsp;},//&nbsp; &nbsp; &nbsp;{//&nbsp; &nbsp; &nbsp; &nbsp;"id": 71712,//&nbsp; &nbsp; &nbsp; &nbsp;"option": "歌曲3",//&nbsp; &nbsp; &nbsp; &nbsp;"questionId": 3,//&nbsp; &nbsp; &nbsp; &nbsp;"title": "你喜欢的歌曲"//&nbsp; &nbsp; &nbsp;}//&nbsp; &nbsp;]// }对相同类型的题目进行遍历,后面的都放到第一个里面即可。并重新按照原格式存放// 用于按照原格式存放最后的数据var data =[];for (var key in categories) {&nbsp; &nbsp; var i, l;&nbsp; &nbsp; if (categories.hasOwnProperty(key)) {&nbsp; &nbsp; &nbsp; &nbsp; for (i = 1; i < categories[key].length; ++i) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // 第一个的值 = ',' +&nbsp; 下一个的值&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; categories[key][0].option += ',' + categories[key][i].option;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // 删除下一个&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; categories[key].splice(i, 1);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; --i;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; data.push(categories[key][0]);&nbsp; &nbsp; }}console.log('categories',JSON.stringify(categories, null, 2));console.log('data',JSON.stringify(data, null, 2));//&nbsp; 'categories' {//&nbsp; &nbsp;"1": [//&nbsp; &nbsp; &nbsp;{//&nbsp; &nbsp; &nbsp; &nbsp;"id": 72749,//&nbsp; &nbsp; &nbsp; &nbsp;"option": "x",//&nbsp; &nbsp; &nbsp; &nbsp;"questionId": 1,//&nbsp; &nbsp; &nbsp; &nbsp;"title": "你的名字"//&nbsp; &nbsp; &nbsp;}//&nbsp; &nbsp;],//&nbsp; &nbsp;"2": [//&nbsp; &nbsp; &nbsp;{//&nbsp; &nbsp; &nbsp; &nbsp;"id": 33498,//&nbsp; &nbsp; &nbsp; &nbsp;"option": "动作1,动作2,动作3,动作4,动作5",//&nbsp; &nbsp; &nbsp; &nbsp;"questionId": 2,//&nbsp; &nbsp; &nbsp; &nbsp;"title": "你喜欢的动作"//&nbsp; &nbsp; &nbsp;}//&nbsp; &nbsp;],//&nbsp; &nbsp;"3": [//&nbsp; &nbsp; &nbsp;{//&nbsp; &nbsp; &nbsp; &nbsp;"id": 79801,//&nbsp; &nbsp; &nbsp; &nbsp;"option": "歌曲1,歌曲2,歌曲3",//&nbsp; &nbsp; &nbsp; &nbsp;"questionId": 3,//&nbsp; &nbsp; &nbsp; &nbsp;"title": "你喜欢的歌曲"//&nbsp; &nbsp; &nbsp;}//&nbsp; &nbsp;]// }// 'data' [//&nbsp; &nbsp;{//&nbsp; &nbsp; &nbsp;"id": 72749,//&nbsp; &nbsp; &nbsp;"option": "x",//&nbsp; &nbsp; &nbsp;"questionId": 1,//&nbsp; &nbsp; &nbsp;"title": "你的名字"//&nbsp; &nbsp;},//&nbsp; &nbsp;{//&nbsp; &nbsp; &nbsp;"id": 33498,//&nbsp; &nbsp; &nbsp;"option": "动作1,动作2,动作3,动作4,动作5",//&nbsp; &nbsp; &nbsp;"questionId": 2,//&nbsp; &nbsp; &nbsp;"title": "你喜欢的动作"//&nbsp; &nbsp;},//&nbsp; &nbsp;{//&nbsp; &nbsp; &nbsp;"id": 79801,//&nbsp; &nbsp; &nbsp;"option": "歌曲1,歌曲2,歌曲3",//&nbsp; &nbsp; &nbsp;"questionId": 3,//&nbsp; &nbsp; &nbsp;"title": "你喜欢的歌曲"//&nbsp; &nbsp;}// ]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript