JS将集合按格式补全
前言概述:
要求完成以下的目标:统计一周内的骑行距离,如果没有骑行,显示距离为零;
我们知道,很多时候数据库都只记录有内容的数据,没有内容的数据是不会被记录的,比如说某天没有骑行,系统不会把当天骑行距离为零记录到数据库,这样就产生个问题,前端页面要显示的数据格式如下 ↓↓↓
周一 | 周二 | 周三 | 周四 | 周五 | 周六 | 周日 | |
距离(km) | 20 | 0 | 22 | 25 | 0 | 0 | 40 |
但是从后端查询到的数据却是 ↓↓↓
周一 | 周三 | 周四 | 周日 | |
距离(km) | 20 | 22 | 25 | 40 |
辣么,现在的问题就是,缺少了那部分距离为0的数据,页面没法正常显示;这时候就需要我们重新组织数据了;
话不多说,直接上代码:
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>示例</title> 6 </head> 7 <body> 8 <div style="padding:5vw;font-size:2vw;font-family:仿宋;" id="content"></div> 9 <script> 10 //KEY模板 11 const template = [ "周一", "周二", "周三", "周四", "周五", "周六", "周日"]; 12 13 //后端返回的json 14 let list = [ 15 {"name":"周一","value" : 20}, 16 {"name":"周三","value" : 22}, 17 {"name":"周四","value" : 25}, 18 {"name":"周日","value" : 40}, 19 ]; 20 21 //最终结果 22 let _list = []; 23 24 //循环模板,确保能够按照模板的数量组织数据 25 for (var i = 0; i < template.length; i++) { 26 let k = template[i]; 27 28 //创建一个对象模型 29 let entity = {"name":"","value":0}; 30 31 //“倒序”循环已有的数据 32 for (let j = 0; j < i+1 ; j++) { 33 let item = list[j]; 34 if (item.name === k) { 35 //如果模板中的KEY跟当前对象的KEY一致,则添加该对象到空集合 36 _list.push(item); 37 list.splice(j,1);//从集合中删除当前对象 38 }else{ 39 //如果模板中的KEY跟当前对象的KEY不一致,设置对象模型的KEY为模板的KEY,设置值为0,添加到空集合 40 entity.name = k; 41 entity.value = 0; 42 _list.push(entity); 43 } 44 break;//确保循环只进行一次 45 } 46 } 47 48 document.getElementById("content").innerText = JSON.stringify(_list); 49 console.log(_list); 50 </script> 51 </body> 52 </html>
复制以上代码,保存为HTML文件;在浏览器打开,就可以看到我们想到的数据。
成功不是终点,失败也并非末日,重要的是前行的勇气!