• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

typescript 深层次对象内层(N)转外层(N),支持多层级递归转换,多应用于多语言数据结 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

如下数据结构转换

var a = {
  b: {
    en: 1,
    zh: 2,
  },
  c: {
    en: 3,
    zh: 4,
  },
}
//===>
var b = {
  en: {
    b: 1,
    c: 3,
  },
  zh: {
    b: 2,
    c: 4,
  },
}

Usage


let source: Record<string, any> = {
  languages: {
    zh: '简体中文',
    en: 'English',
  },
  nav: {
    home: {
      zh: '',
      en: 'home',
    },
    think: {
      zh: '',
      en: 'think',
    },
    code: {
      zh: '',
      en: 'code',
    },
    project: {
      zh: '',
      en: 'project',
    },
    vlog: {
      zh: '',
      en: 'vlog',
    },
    about: {
      zh: '',
      en: 'about',
    },
  },
  text: {
    origin: {
      original: {
        zh: '原创',
        en: 'og',
      },
      reprint: {
        zh: '转载',
        en: 'rp',
      },
      hybrid: {
        zh: ' 混撰',
        en: 'hb',
      },
    },
    slogan: {
      zh: '砥砺前行,未来可期',
      en: 'Because the mountain was there.',
    },
    category: {
      name: {
        zh: '分门别类',
        en: 'Categories',
      },
      empty: {
        zh: '未分类',
        en: 'no cate',
      },
    },
    search: {
      zh: '向外探索,向内觉知',
      en: 'Search...',
    },
  },
}
let resObj: Record<string, any> = {
  en: {},
  // zh: {},
}
function judge(
  res: Record<string, any>,
  obj: Record<string, any>,
  type: string
) {
  for (const k in obj) {
    let v = obj[k]
    if (typeof v !== 'string' && !v[type]) {
      res[k] = {}
      judge(res[k], v, type)
    } else {
      res[k] = v[type]
    }
  }
}
function formatData(obj: Record<string, any>) {
  Object.keys(resObj).forEach(v => {
    judge(resObj[v], obj, v)
  })
}
formatData(source)
export default resObj

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
TypeScriptreflect-metadata库发布时间:2022-07-18
下一篇:
Typescript 其实就想排个序和枚举取数发布时间:2022-07-18
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap