js 数组,数据补全

var arr = [
    {datakey: "a", item: "28日19:27:33", scaleValue: "0"},
    {datakey: "b", item: "28日19:27:33", scaleValue: "1"},
    {datakey: "a", item: "28日19:28:00", scaleValue: "3"},
    {datakey: "b", item: "28日19:28:00", scaleValue: "1"},
    {datakey: "c", item: "28日19:28:00", scaleValue: "3"}
]

//补全后
{"a":["3","3"],"b":["1","1"],"c":[null,"0"]}
      let keyDataMap = {};
        let timeArr = [];

        function generateDataForEchar(dataArr) {
          let currentTimeData = {
            "timeStamp": "",
            "timeStampData": {}
          }
          for (let i = 0; i < dataArr.length; i++) {
            let data = dataArr[i];
            let timeStamp = data["item"];
            let timeStampData;
            if (!!currentTimeData.timeStamp && currentTimeData.timeStamp === timeStamp) {
              //表示当前的数据仍是同一个时间节点,就先缓存
              timeStampData = currentTimeData["timeStampData"];
            } else {
              //表示当前出现了一个新的时间点,此时需要将上一个时间点的数据存入各个数组中
              addDataToArr(currentTimeData);
              //重置时间节点的数据
              timeStampData = {}
              currentTimeData = {
                "timeStamp": timeStamp,
                timeStampData: timeStampData
              }
            }
            //对于同个时间点的同个key的逻辑,目前是取最后一次出现的,你可以根据实际需要进行调整
            timeStampData[data.datakey] = data.scaleValue;
          }
          //避免丢失最后一个时间点节点的数据
          addDataToArr(currentTimeData);
        }

        function addDataToArr(currentTimeData) {
          let timeStamp = currentTimeData.timeStamp;
          if (!!timeStamp) {
            timeArr.push(timeStamp);
            let timeStampData = currentTimeData.timeStampData;
            let tmpKeyMap = {};
            for (let dataKey in timeStampData) {
              let dataArr = keyDataMap[dataKey];
              let timeStampValue = timeStampData[dataKey];
              tmpKeyMap[dataKey] = "1";
              if (!dataArr) {
                dataArr = getArrayWithNull(timeArr.length - 1);
                keyDataMap[dataKey] = dataArr;
              }
              keyDataMap[dataKey].push(timeStampValue)
            }
            for (let dataKey in keyDataMap) {
              if (!tmpKeyMap[dataKey]) {
                //当前节点内未出现对应的dataKey,则对应节点加入一个null
                keyDataMap[dataKey].push(null);
              }
            }
          }
        }

        function getArrayWithNull(size) {
          let arr = []
          for (let i = 0; i < size; i++) {
            arr.push(null);
          }
          return arr;
        }

        generateDataForEchar(arr);
        console.log(timeArr);
        console.log(JSON.stringify(keyDataMap));
var arr = [
    {datakey: "a", item: "28日19:27:33", scaleValue: "0"},
    {datakey: "b", item: "28日19:27:33", scaleValue: "1"},
    {datakey: "a", item: "28日19:28:00", scaleValue: "3"},
    {datakey: "b", item: "28日19:28:00", scaleValue: "1"},
    {datakey: "c", item: "28日19:28:00", scaleValue: "3"}
]

// 补全后
  [
    {datakey: "a", item: "28日19:27:33", scaleValue: "0"},
    {datakey: "b", item: "28日19:27:33", scaleValue: "1"},
    {datakey: "c", item: "28日19:27:33", scaleValue: null},
    {datakey: "a", item: "28日19:28:00", scaleValue: "3"},
    {datakey: "b", item: "28日19:28:00", scaleValue: "1"},
    {datakey: "c", item: "28日19:28:00", scaleValue: "3"}
]
       //提取 datakey
        var keys = []
        arr.forEach(e => {
          keys.push(e.datakey)
        });
        keys = new Set(keys);

        //这部分是提取 同时间数据
        var resData = arr;
        let tempArr = [];
        let Data = [];
        for (let i = 0; i < resData.length; i++) {
          if (tempArr.indexOf(resData[i].item) === -1) {
            Data.push({
              item: resData[i].item,
              dataInfo: [resData[i]]
            });
            tempArr.push(resData[i].item);
          } else {
            for (let j = 0; j < Data.length; j++) {
              if (Data[j].item == resData[i].item) {
                Data[j].dataInfo.push(resData[i]);
                break;
              }
            }
          }
        }

        //这部分是补齐
        Data.forEach((e, i) => {
          if (e.dataInfo.length !== keys.length) {
            keys.forEach(sd => {
              if (findIndexByKeyValue(e.dataInfo, 'datakey', sd) != -1) {
                // console.log('yes', sd)
              } else {
                // console.log('no', sd);
                var obj = {
                  datakey: sd,
                  item: e.dataInfo[0].item,
                  scaleValue: null
                }
                e.dataInfo.push(obj)
              }
            });
          }
        });
      //  console.log('补齐', Data)
      
        function findIndexByKeyValue(arr, key, valuetosearch) {
          for (var i = 0; i < arr.length; i++) {
            if (arr[i][key] == valuetosearch) {
              return i;
            }
          }
          return -1;
        }
        //提取, 压平
        var arrN = []
        Data.forEach(e => {
          // console.log('eeee', e.dataInfo)
          arrN.push(e.dataInfo)
        });
        arrN = arrN.flat()
        console.log('最终', arrN)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Discuz!简介Discuz! X3.4 在继承和完善 Discuz! X3.3 的基础上,针对 PHP7 进行了优化。对于 X3.2 用户来说,X3.3 已继承了 X3.2 的补丁修复工作。安全稳定的程序为站长提供更加可靠的保障。主要更新功能为: 1、完善视频解析播放 2、HTTPS兼容性优化 3、修复各类已知BUG和漏洞修复与优化的问题列表: 1、对备案号的网址进行更新 2、修复 一处PHP5.3不兼容的写法 3、修复 目前系统内存在的部分小Bug 4、清除文本格式功能 增强 5、因视频认证已无法使用,去掉用户的个人空间 - 个人资料页的:“视频认证:未认证”。 6、修复 版块页未判断是否可发帖就显示验证码的问题 7、修复UC后台文件里的目录路径获取方式,方便站长更换入口名称 8、优化 语音验证码通过HTML5播放,放弃Flash 9、修复 系统内存在的部分小Typo 10、修复 小黑屋页面“更多”按钮行为异常的问题 11、修复主题发布页,当没有可修复数据时,点击修复数据的提示框类型不正常 12、修复新版本chrome下帖子列表页加载按钮行为异常的问题 13、修复 语言包的spacecp中积分代码有误的问题 14、修复 系统无法阻止某些无法正常登录的特殊符号用于注册用户名的问题 15、修复 HTML5通知功能在现代浏览器不可用的问题 16、修正官方拼写错误导致用户资料中的 【加入的群组】 无显示问题 17、修复 在部分情况下高亮功能导致页面卡死的问题 18、修复 chrome下编辑器插入链接功能无法立即使用的问题 19、修复 开启内存缓存时,forum_forumfield 表没被缓存导致的主题分类消失、版块规则消失、访问权限无效等问题 20、删除用户无法删除 用户记录表(home_doing)数据 21、修复 默认关闭非安全请求升级,保证HTTP外域资源正常显示 22、修复 IE11及firefox在使用编辑器按钮的时候出现的bug 23、修复 个人资料页点击放大签名档图片时样式缺失的问题 24、修复 帖子列表页点击长条形下一页按钮时加载出的帖子后方图标样式异常的问题 25、修复 IE9及以上在多处出现的css错位问题 26、修复 补全IN_DISCUZ相关代码 27、修复 云平台插件降级工具无法降级一部分云平台插件的问题 28、修复 使用花括号做数组被废弃导致在部分服务器配置下产生提示信息导致程序功能异常的Bug 29、优化 HTTPS兼容性优化 30、图片宽高一样时,无法缩放 31、修复 在PHP 5.3下内存缓存报错的Bug 32、修复 开启“关闭session机制”后,论坛验证码即使正确也会弹出错误提示 33、修复 并发任务可能产生的刷分问题 34、防止并发评分与道具的接口产生的刷分等问题 35、【轻量级 PR】:修复 HTTPS下二维码不显示BUG 36、修复 部分发送邮件场景下信任HTTP_HOST所带来的安全隐患 37、修复 UCenter任意文件包含Bug 38、【轻量级 PR】:修复 msapplication-task 字段的笔误 39、【轻量级 PR】:修复 界面 ? 风格管理中新增操作结果混乱的问题 40、修复 IE6、IE7等浏览器提示common.js报错的Bug 41、修复 前台充值卡密页面不显示验证码和同一卡密充值2次成功的Bug 42、【轻量级 PR】:修复门户”模块管理“菜单高亮相关BUG 43、【轻量级 PR】:修复target书写错误问题 44、【轻量级 PR】:修复 在宽屏模式下点击切换配色时,宽屏状态被破坏且无法切换的问题 45、【轻量级 PR】:修复 在PHP 5.3下核心报错的Bug 46、修复 当开启顶部导航固定、头像区域固定时,滚动页面出现页面、元素跳动,及元素闪烁等问题 47、修复 dintval BUG 48、优化 HTTPS兼容性优化 49、修复 目前系统内存在的部分小Bug 50、【轻量级 PR】:修复 一处后台点击后会出现双层frame的问题 51、修复部分页面游客无法看见关键字、描述的BUG 52、修复 通知提醒页面分页链接错误的BUG 53、【轻量级 PR】:优化 去除Manyou残余代码 54、修复 道具中心列表页在部分情况下排序异常的Bug 55、附件下载500错误修复 56、优化 放松视频网站链接解析标准 57、修复 交易贴买家卖家评价数据展示异常的问题、交易贴模板不支持自适应展示的问题 58、修复 由于调用顺序问题导致MIME Type设置无法生效的问题 59、优化 触屏版支持视频在线播放、新增 AcFun和哔哩哔哩等网站的
Discuz! X3.4 在继承和完善 Discuz! X3.3 的基础上,去除了云平台的相关代码,其他功能保持不变,如果您的论坛不需要云平台可以选择安装或更新到此版本。 主要更新功能为: 1、完善视频解析播放 2、HTTPS兼容性优化 3、修复各类已知BUG和漏洞 修复与优化的问题列表: 1、对备案号的网址进行更新 2、修复 一处PHP5.3不兼容的写法 3、修复 目前系统内存在的部分小Bug 4、清除文本格式功能 增强 5、因视频认证已无法使用,去掉用户的个人空间 - 个人资料页的:“视频认证:未认证”。 6、修复 版块页未判断是否可发帖就显示验证码的问题 7、修复UC后台文件里的目录路径获取方式,方便站长更换入口名称 8、优化 语音验证码通过HTML5播放,放弃Flash 9、修复 系统内存在的部分小Typo 10、修复 小黑屋页面“更多”按钮行为异常的问题 11、修复主题发布页,当没有可修复数据时,点击修复数据的提示框类型不正常 12、修复新版本chrome下帖子列表页加载按钮行为异常的问题 13、修复 语言包的spacecp中积分代码有误的问题 14、修复 系统无法阻止某些无法正常登录的特殊符号用于注册用户名的问题 15、修复 HTML5通知功能在现代浏览器不可用的问题 16、修正官方拼写错误导致用户资料中的 【加入的群组】 无显示问题 17、修复 在部分情况下高亮功能导致页面卡死的问题 18、修复 chrome下编辑器插入链接功能无法立即使用的问题 19、修复 开启内存缓存时,forum_forumfield 表没被缓存导致的主题分类消失、版块规则消失、访问权限无效等问题 20、删除用户无法删除 用户记录表(home_doing)数据 21、修复 默认关闭非安全请求升级,保证HTTP外域资源正常显示 22、修复 IE11及firefox在使用编辑器按钮的时候出现的bug 23、修复 个人资料页点击放大签名档图片时样式缺失的问题 24、修复 帖子列表页点击长条形下一页按钮时加载出的帖子后方图标样式异常的问题 25、修复 IE9及以上在多处出现的css错位问题 26、修复 补全IN_DISCUZ相关代码 27、修复 云平台插件降级工具无法降级一部分云平台插件的问题 28、修复 使用花括号做数组被废弃导致在部分服务器配置下产生提示信息导致程序功能异常的Bug 29、优化 HTTPS兼容性优化 30、图片宽高一样时,无法缩放 31、修复 在PHP 5.3下内存缓存报错的Bug 32、修复 开启“关闭session机制”后,论坛验证码即使正确也会弹出错误提示 33、修复 并发任务可能产生的刷分问题 34、防止并发评分与道具的接口产生的刷分等问题 35、【轻量级 PR】:修复 HTTPS下二维码不显示BUG 36、修复 部分发送邮件场景下信任HTTP_HOST所带来的安全隐患 37、修复 UCenter任意文件包含Bug 38、【轻量级 PR】:修复 msapplication-task 字段的笔误 39、【轻量级 PR】:修复 界面 ? 风格管理中新增操作结果混乱的问题 40、修复 IE6、IE7等浏览器提示common.js报错的Bug 41、修复 前台充值卡密页面不显示验证码和同一卡密充值2次成功的Bug 42、【轻量级 PR】:修复门户”模块管理“菜单高亮相关BUG 43、【轻量级 PR】:修复target书写错误问题 44、【轻量级 PR】:修复 在宽屏模式下点击切换配色时,宽屏状态被破坏且无法切换的问题 45、【轻量级 PR】:修复 在PHP 5.3下核心报错的Bug 46、修复 当开启顶部导航固定、头像区域固定时,滚动页面出现页面、元素跳动,及元素闪烁等问题 47、修复 dintval BUG 48、优化 HTTPS兼容性优化 49、修复 目前系统内存在的部分小Bug 50、【轻量级 PR】:修复 一处后台点击后会出现双层frame的问题 51、修复部分页面游客无法看见关键字、描述的BUG 52、修复 通知提醒页面分页链接错误的BUG 53、【轻量级 PR】:优化 去除Manyou残余代码 54、修复 道具中心列表页在部分情况下排序异常的Bug 55、附件下载500错误修复 56、优化 放松视频网站链接解析标准 57、修复 交易贴买家卖家评价数据展示异常的问题、交易贴模板不支持自适应展示的问题 58、修复 由于调用顺序问题导致MIME Type设置无法生效的问题 59、优化 触屏版支持视频在线播放、新增 AcFun和哔哩哔哩等网站的视频解析 60、修复 邮件验证链接有效期内可以强制修改用户邮箱的Bug 61、优化 支持论坛、日志模块部分音视频格式、部分网站的HTML5播放 62、优化 回帖回收站支持自定义单页面审

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_41737172

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值