如下数据结构转换

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),支持多层级递归转换,多应用于多语言数据结构转换的更多相关文章

  1. [TypeScript] JSON对象转TypeScript对象范例

    [TypeScript] JSON对象转TypeScript对象范例 Playground http://tinyurl.com/nv4x9ak Samples class DataTable { p ...

  2. Angular2中实现基于TypeScript的对象合并方法:extend()

    TypeScript里面没有现成的合并对象的方法,这里借鉴jQuery里的$.extend()方法.写了一个TypeScript的对象合并方法,使用方法和jQuery一样. 部分代码和jQuery代码 ...

  3. vue props 传入对象Object,如果外层更改属性,默认里面是不更新,需要使用 this.$set(this.datese1, 'xsfaDateYear1', '')

    vue props 传入对象Object,如果外层更改属性,默认里面是不更新,需要使用 this.$set(this.datese1, 'xsfaDateYear1', '')

  4. 转换成json字符串,与json字符串转换成java类型都要先转换成json对象

    转换成json字符串,与json字符串转换成java类型都要先转换成json对象

  5. 让内层Div将外层Div撑开

    在CSS排版中,如果一个层中的层使用了float浮动的话,那么就有可能会出现外层没有被内层撑开的情况,如以下代码所示: <div style="width:300px; "& ...

  6. typeScript面对对象篇二

    接口 接触过面向对象的后端语言的应该对接口很熟悉,只接触过前端的对接口会有点陌生,在维基百科中对OOP中接口的定义是这样的: 在面向对象的语言中,术语interface经常被用来定义一个不包含数据和逻 ...

  7. typeScript面对对象篇一

    面向对象是typescript的核心部分,这里先介绍下面向对象的七大原则: 单一原则:一个类子负责一个职责. 里氏替换原则:子类可以在任何地方替换它的父类. 依赖倒置原则:代码要依赖于抽象的类,而不要 ...

  8. IE浏览器中overflow:hidden无效,内层元素超出外层div的解决方法

    原文地址:http://www.xin126.cn/show.asp?id=2624 在用css布局的时候,用IE浏览器(ie6.ie7.ie8)预览,有时候会出现内层元素(内部DIV.图片等)超出外 ...

  9. 嵌套的ng-repeat双层循环,内层如何获取外层的$index?

    html代码: <div> <ul ng-repeat="row in table track by $index"> <li ng-repeat=& ...

随机推荐

  1. 脚本_获取本机 MAC 地址

    #!bin/bash#作者:liusingbon#功能:获取本机 MAC 地址ip a s |awk 'BEGIN{print "本机 MAC 地址信息如下:"}/^[0-9]/{ ...

  2. python面向对象--反射机制

    class Black: feture="ugly" def __init__(self,name,addr): self.addr=addr self.name=name def ...

  3. Spring的AOP和IoC及隔离级别

    Spring的AOP和IoC Spring AOP:代理机制.Spring提供的自动代理机制 Spring的IoC来实组件之间的依赖关系注入, 使控制层与业务实现分离,即客户通过调用业务委托接口来调用 ...

  4. Cobaltstrike系列教程(二)-Listner与Payload生成 heatlevel

    0x000-前文 Cobaltstrike系列教程(一)简介与安装 0x001-Listner(监听器)介绍 ①Cobaltstrike listner简介 可能有一些小白并不理解什么叫做listne ...

  5. Python之批量读取文件【面试必学】

    python的os模块可以实现普遍的操作系统功能,并且和平台无关.以下为实现根目录下文件的批量读取. os.listdir(dirname)可以列出dirname下的目录和文件,依次读取相应的文件即可 ...

  6. threading包的例子和queue包的例子

    参考:https://www.cnblogs.com/tkqasn/p/5700281.html 参考:https://www.cnblogs.com/tkqasn/p/5700281.html th ...

  7. elememt-ui 的 el-icon-iconName 图标 显示问题!

    今天想在按钮处添加一个图标,但是显示不出.自己找了半天,终于找到了,希望帮到大家! 1,首先是没有报错的,但是有警告⚠ 意思是说什么拦截了之类的问题,但是到底是哪里问题导致拦截了呢?找了好久,原来是我 ...

  8. OC 类的load方法

    +(void)load 方法 不需要主动调用,类加载时会走这个方法

  9. 题解1235. 洪水 (Standard IO)

    Description 一天, 一个画家在森林里写生,突然爆发了山洪,他需要尽快返回住所中,那里是安全的.森林的地图由R行C列组成,空白区域用点“.”表示,洪水的区域用“*”表示,而岩石用“X”表示, ...

  10. 学习:多项式算法----FFT

    FFT,即快速傅里叶变换,是离散傅里叶变换的快速方法,可以在很低复杂度内解决多项式乘积的问题(两个序列的卷积) 卷积 卷积通俗来说就一个公式(本人觉得卷积不重要) $$C_k=\sum_{i+j=k} ...