如何遍历数据集对象并修改属性键?数据格式转换技术求助
解决数据格式转换问题
别担心,这个格式转换其实很直接,我们只需要逐层遍历对象,把旧的属性键映射到新的键上就行。我帮你完善了formatData函数,直接就能用:
function formatData(receivedData) { // 遍历顶层数组的每个对象 return receivedData.map(item => { return { // 把原name替换成id id: item.name, // 处理series数组,转换成data数组 data: item.series.map(seriesItem => { // 子对象里的name换成x,value换成y return { x: seriesItem.name, y: seriesItem.value }; }) }; }); } // 用你的示例数据测试 const received = [ { "name": "1PM Industries Inc ", "series": [ { "value": 0.0001, "name": "2019-08-30" }, { "value": 0, "name": "2019-08-28" } ] } ]; const formattedResult = formatData(received); console.log(formattedResult);
运行这段代码后,输出的格式就完全符合你的需求了:
[ { "id": "1PM Industries Inc ", "data": [ { "x": "2019-08-30", "y": 0.0001 }, { "x": "2019-08-28", "y": 0 } ] } ]
简单解释一下逻辑:
- 外层的
map用来遍历原数组的每个顶层对象,返回一个新的转换后的对象数组。 - 对于每个顶层对象,我们直接创建新的
id属性,值就是原对象的name。 - 内层的
map用来处理series数组里的每个子项,把每个子项的name改成x,value改成y,组成新的data数组。
如果你的原数据里还有其他需要保留的属性,可以用扩展运算符...来保留,比如:
return { ...item, // 保留原对象的其他属性 id: item.name, data: item.series.map(seriesItem => ({ x: seriesItem.name, y: seriesItem.value })), // 删掉旧的属性键(可选,如果你不想保留的话) name: undefined, series: undefined };
这样就灵活多了,不管原数据有没有额外属性,都能完美转换~
内容的提问来源于stack exchange,提问作者Dante_97
相关产品推荐
相关产品推荐

