| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- // padStart 的 polyfill,因为某些机型或情况,还无法支持es7的padStart,比如电脑版的微信小程序
- // 所以这里做一个兼容polyfill的兼容处理
- if (!String.prototype.padStart) {
- // 为了方便表示这里 fillString 用了ES6 的默认参数,不影响理解
- String.prototype.padStart = function(maxLength, fillString = ' ') {
- if (Object.prototype.toString.call(fillString) !== "[object String]") throw new TypeError(
- 'fillString must be String')
- let str = this
- // 返回 String(str) 这里是为了使返回的值是字符串字面量,在控制台中更符合直觉
- if (str.length >= maxLength) return String(str)
- let fillLength = maxLength - str.length,
- times = Math.ceil(fillLength / fillString.length)
- while (times >>= 1) {
- fillString += fillString
- if (times === 1) {
- fillString += fillString
- }
- }
- return fillString.slice(0, fillLength) + str;
- }
- }
- // 其他更多是格式化有如下:
- function dataProcess(rawData) {
- if (typeof rawData !== 'string' || rawData.trim() === '') {
- console.error('dataProcess 函数错误:输入必须是非空字符串');
- throw new Error('无效的原始数据,需传入非空字符串格式的JSON数据');
- }
- // 1. 修复语法错误:逗号替换为冒号、去重重复的 measureId
- const cleanedData = rawData
- .replace(/"success",true/, '"success":true')
- .replace(/"cmdType","pulseResult"/, '"cmdType":"pulseResult"')
- // 修复2:去重重复的measureId(原始数据中重复出现,JSON不允许重复键,保留最后一个)
- .replace(/"measureId":"d5a615a6bab946429b4a4bd0a40bb253",/, '')
- // 可选修复:处理可能的多余逗号(部分场景下原始数据可能末尾多逗号,避免解析失败)
- .replace(/,\s*([}\]])/g, '$1');
- // 2. 第一次解析:获取外层 JSON 对象
- const outerData = JSON.parse(cleanedData);
-
- // 3. 第二次解析:处理嵌套的 pr 和 reportData(字符串转 JSON)
- // outerData.pr = JSON.parse(outerData.pr);
- // outerData.reportData = JSON.parse(outerData.reportData);
-
- return outerData;
- }
- export default dataProcess
|