【问题标题】:Covert flat array of objects to array of nested objects将平面对象数组转换为嵌套对象数组
【发布时间】:2020-01-15 21:21:24
【问题描述】:

我无法将平面数组转换为多嵌套数组


[{
    code: "1",
    text: "FatturaElettronicaHeader",
  },
  {
    code: "1.1",
    text: "DatiTrasmissione",
  },
  {
    code: "1.1.5",
    text: "ContattiTrasmittente",
  },
  {
    code: "1.1.5.1",
    text: "Telefono",
  },
  {
    code: "1.1.5.2",
    text: "Email",
  },
  {
    code: "1.2",
    text: "CedentePrestatore",
  }
]

我想要这样,如果一个数组元素代码包含另一个数组元素的代码,它应该是那个元素的子元素。所以 1.1 和 1.2 都是 1 的孩子。那么 1.1.5 只是 1.1 的孩子。新数组中的每个对象应该只有一个

【问题讨论】:

  • 它在 javascript 中

标签: javascript arrays multidimensional-array nested mapping


【解决方案1】:

您可以使用forEach循环创建嵌套树结构来遍历数组,然后对于每个对象,您可以使用split获取路径数组和reduce方法基于路径数组创建嵌套结构。

const data = [{"code":"1","text":"FatturaElettronicaHeader"},{"code":"1.1","text":"DatiTrasmissione"},{"code":"1.1.5","text":"ContattiTrasmittente"},{"code":"1.1.5.1","text":"Telefono"},{"code":"1.1.5.2","text":"Email"},{"code":"1.2","text":"CedentePrestatore"}];

const result = [], level = {result}
data.forEach(e => {
  e.code.split('.').reduce((r, k) => {
    if(!r[k]) {
      r[k] = {result: []}
      r.result.push({...e, children: r[k].result})
    }
    return r[k];
  }, level)
})

console.log(result);

您也可以使用两个reduce 方法而不是forEach 循环来获得相同的结果。

const data = [{"code":"1","text":"FatturaElettronicaHeader"},{"code":"1.1","text":"DatiTrasmissione"},{"code":"1.1.5","text":"ContattiTrasmittente"},{"code":"1.1.5.1","text":"Telefono"},{"code":"1.1.5.2","text":"Email"},{"code":"1.2","text":"CedentePrestatore"}];

const result = data.reduce((level, {code, ...rest}) => {
  return code.split('.').reduce((r, k) => {
    if(!r[k]) {
      const children = [];
      r[k] = {result: children}
      r.result.push({code, ...rest, children})
    }
    return r[k]
  }, level), level
}, {result: []}).result

console.log(result);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多