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

Posted smzd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了typescript 深层次对象内层(N)转外层(N),支持多层级递归转换,多应用于多语言数据结构转换相关的知识,希望对你有一定的参考价值。

如下数据结构转换

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

以上是关于typescript 深层次对象内层(N)转外层(N),支持多层级递归转换,多应用于多语言数据结构转换的主要内容,如果未能解决你的问题,请参考以下文章

内层元素设置浮动,外层元素不设置浮动和高度,内层元素不能撑开外层元素高度问题

css 如何让外层的div 控制住内层div的宽度?

js闭包

js闭包

4.15

java类与嵌套嵌套后,怎么使用最外层的类建立对象后使用内部类的方法?