如何在Typescript中将二维json对象转换为一维json对象

q8l4jmvw  于 2023-02-10  发布在  TypeScript
关注(0)|答案(1)|浏览(170)

如何转换

{
  'summary': {
    'name': 'test1',
    'age': '12',
    'gender': 'M'
  },
  'address': {
    'line1': 'Line1 address test',
    'line2': 'Line 2 Adress test'
  }
}

{
  'summary.name': 'test1',
  'summary.age': '12',
  'summary.gender': 'M',
  'address.line1': 'Line1 address test',
  'address.line2': 'Line 2 Adress test'
}

打印出来的吗

az31mfrm

az31mfrm1#

解决方案与Javascript中的相同,例如,您可以递归地遍历对象并在每个阶段收集属性键:

const data = {
    'summary': {
      'name': 'test1',
      'age': '12',
      'gender': 'M'
    },
    'address': {
      'line1': 'Line1 address test',
      'line2': 'Line 2 Adress test'
    }
  }

const objectEntriesRecursive = (obj, kcol=[]) => Object.entries(obj).flatMap(([key, val]) => (
    val instanceof Object && !Array.isArray(val) ? objectEntriesRecursive(val, [...kcol, key]) : [[[...kcol, key].join('.'), val]])
)

console.log(Object.fromEntries(objectEntriesRecursive(data)))

如果使用Typescript,则类型为

type KeyType = number|string|symbol
type ObjectEntriesRecursive = (obj: {[key: KeyType]: any}, kcol?: KeyType[]) => [string,any][]

相关问题