如何将值为数组的键值对对象转换为多组键值对对象结构?
解决方案:将键值对数组转换为指定的多组对象结构
嘿,我完全明白你想要实现的目标结构了!你的思路方向是对的,只是还需要调整下处理逻辑,把原对象的每个键值对转换成你要的嵌套格式。下面是具体的实现方法:
完整代码示例
const originalObj = { status: ["new", "old"], place: ["york", "blah"] }; const transformedObj = Object.entries(originalObj).reduce((acc, [key, values], idx) => { // 生成 newObj1、newObj2 这类动态键名 const newKey = `newObj${idx + 1}`; // 将数组中的每个元素转换为 { 原键名: 元素值 } 的对象,再组成数组 acc[newKey] = values.map(val => ({ [key]: val })); return acc; }, {}); console.log(transformedObj); // 输出结果: // { // newObj1: [ { status: 'new' }, { status: 'old' } ], // newObj2: [ { place: 'york' }, { place: 'blah' } ] // }
代码逻辑拆解
Object.entries()简化键值对获取:相比你之前用Object.keys()再手动取 value,Object.entries()直接把原对象转换成[[key1, valueArray1], [key2, valueArray2]]这样的二维数组,处理起来更便捷。reduce()构建结果对象:我们以空对象作为初始值,遍历每个键值对时,逐步往里面添加新的键值对。- 动态生成键名:利用遍历的索引
idx,拼接出newObj1、newObj2这类符合要求的键名。 map()转换元素格式:对每个值数组,用map()把每个元素转换成{ [key]: val }的形式——这里的[key]是ES6的计算属性名,能动态设置对象的键名,完美适配原对象的不同键。
对比你的原有尝试
你之前的代码 Object.keys(value).map((key) => [key, value[key]]) 只是把原对象拆成了键值对数组,但没有进一步处理成目标的嵌套结构。上面的代码结合 reduce 和 map,正好补上了这个环节,最终生成你想要的结构。
内容的提问来源于stack exchange,提问作者Nikhil Bharadwaj
相关产品推荐
相关产品推荐

