JavaScript中遍历含数组值的对象并转换为指定格式对象数组
JavaScript 数据转换实现方案
实现逻辑
- 先定义原始字段到目标字段的映射规则,避免硬编码错误
- 遍历原始对象的每个字段,将对应数组内的逗号分隔字符串拆分,去除内容首尾空格,数值类型统一转为Number
- 按索引遍历所有拆分后的数组,将同索引位置的字段值组装为目标对象,最后汇总为符合要求的对象数组
完整代码
// 传入的原始数据 const rawData = { t: ["20181019,20181022,20190509"], o: ["180.34,180.82,193.31"], h: ["180.99,181.40,195.08"], l: ["178.57,177.56,191.59"], c: ["179.85 ,178.75,194.58"] }; // 原始字段和目标字段的映射关系 const fieldMap = { t: 'time', o: 'open', h: 'high', l: 'low', c: 'close' }; // 第一步:拆分原始字符串为独立元素数组 const processedFields = {}; Object.keys(fieldMap).forEach(rawKey => { processedFields[rawKey] = rawData[rawKey][0].split(',').map(item => item.trim()); }); // 第二步:按索引组装目标数组 const result = []; const dataLength = processedFields.t.length; for (let i = 0; i < dataLength; i++) { const currentItem = {}; Object.entries(fieldMap).forEach(([rawKey, targetKey]) => { const value = processedFields[rawKey][i]; currentItem[targetKey] = targetKey === 'time' ? value : Number(value); }); result.push(currentItem); } console.log(result);
输出结果
运行代码后得到的result完全符合要求的结构:
[ { time: '20181019', open: 180.34, high: 180.99, low: 178.57, close: 179.85 }, { time: '20181022', open: 180.82, high: 181.4, low: 177.56, close: 178.75 }, { time: '20190509', open: 193.31, high: 195.08, low: 191.59, close: 194.58 } ]
兼容说明
如果原始数据中各字段拆分后长度不一致,可自行添加边界判断逻辑处理异常场景;如果原始对象的value数组包含多个字符串元素,修改拆分逻辑先拼接所有字符串再拆分即可。
内容的提问来源于stack exchange,提问作者user16834070
相关产品推荐
相关产品推荐

