如何在JavaScript中将嵌套对象转换为指定格式的二维数组?
解决嵌套对象转二维数组的最优方法
首先先修正你提供的原始对象的语法错误(属性间缺少逗号),正确的对象结构应该是:
const obj = { top1: { obj1: {}, obj2: {} }, top2: { obj3: {}, obj4: {} }, top3: { obj5: {}, obj6: {} } };
最优实现方案
使用Object.entries()结合flatMap()是最简洁高效的方式,一步完成遍历与数组扁平化:
const result = Object.entries(obj).flatMap(([topKey, innerObj]) => { return Object.keys(innerObj).map(innerKey => [topKey, innerKey]); }); console.log(result); // 输出:[["top1","obj1"],["top1","obj2"],["top2","obj3"],["top2","obj4"],["top3","obj5"],["top3","obj6"]]
为什么你的map方法没成功?
你之前用Object.keys(obj).map(...)时,map会返回一个嵌套数组(比如[[["top1","obj1"],["top1","obj2"]], [...]])——每个顶层key对应的内层处理结果是一个数组,而普通map不会自动扁平化嵌套结构,最终得到的是三维数组,不符合预期。flatMap相当于先执行map再自动执行一次flat(),刚好能把嵌套数组展开成目标二维结构。
兼容旧环境的替代方案
如果运行环境不支持ES2019的flatMap,可以用map配合concat.apply实现扁平化:
const result = [].concat.apply([], Object.keys(obj).map(topKey => { return Object.keys(obj[topKey]).map(innerKey => [topKey, innerKey]); }));
内容的提问来源于stack exchange,提问作者Ste
相关产品推荐
相关产品推荐

