// 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