求助:将特定结构对象转换为目标格式数组的实现方案
解决对象结构转换的方案
没问题,我来帮你搞定这个对象结构转换的需求!你的目标是把intensity对象里每个键对应的数组,从包含{in: "字符串", out: "字符串"}的格式,转换成包含[数字, 数字]的数组,对吧?你提到的Object.values确实能派上用场,不过结合Object.entries和Object.fromEntries会更方便处理整个对象的转换,我给你两种可行的实现方式:
方式一:用计算属性(推荐,不修改原数据)
如果你是在Vue组件里处理,用计算属性可以保持原数据不变,同时得到转换后的结果:
computed: { transformedIntensity() { // 将原对象转为键值对数组,再逐个处理 return Object.fromEntries( Object.entries(this.intensity).map(([key, itemList]) => { // 把每个{in, out}对象转成数字数组 const convertedList = itemList.map(item => [ parseInt(item.in, 10), parseInt(item.out, 10) ]); return [key, convertedList]; }) ); } }
方式二:直接修改原数据
如果需要直接更新原intensity的数据,可以在组件的生命周期钩子(比如mounted)里处理:
mounted() { // 遍历原对象的每个键 for (const key in this.intensity) { // 把对应数组里的每个对象转成数字数组 this.intensity[key] = this.intensity[key].map(item => [ Number(item.in), Number(item.out) ]); } }
代码说明
Object.entries():把原intensity对象拆成[键, 值]的数组,方便遍历处理map():不管是处理键值对还是内部的对象数组,map都是用来批量转换元素的工具parseInt()/Number():把字符串类型的in和out值转换成数字,parseInt第二个参数10是指定十进制,避免进制解析的意外问题Object.fromEntries():把处理后的键值对数组重新转回对象结构,得到你想要的格式
转换后的最终结果会和你期望的完全一致:
{ "1": [[54,78], [45,12]], "3": [[40,50], [80,12], [99,2]], "9": [[54,21], [25,14], [25,47], [87,98], [45,45]] }
内容的提问来源于stack exchange,提问作者TheDevGuy
相关产品推荐
相关产品推荐

