Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从JavaScript数组递归构建JSON_Javascript_Arrays_Typescript_Recursion - Fatal编程技术网

从JavaScript数组递归构建JSON

从JavaScript数组递归构建JSON,javascript,arrays,typescript,recursion,Javascript,Arrays,Typescript,Recursion,我想从http请求返回的数组中构建一个JSON对象 我的实际阵列如下所示: [{ Description: "Product" IsInstanciable: false IsMasked: false Name: "ProductBase" Subclasses: [{ Description: "Product2" IsInstanciable: false

我想从http请求返回的数组中构建一个JSON对象 我的实际阵列如下所示:

[{
    Description: "Product"
    IsInstanciable: false
    IsMasked: false
    Name: "ProductBase"
    Subclasses: [{
      Description: "Product2"
      IsInstanciable: false
      IsMasked: false
      Name: "ProductBase2",
      Count: 5,
      Subclasses:[]
    },
    {
      Description: "Product3"
      IsInstanciable: false
      IsMasked: false
      Name: "ProductBase3",
      Count: 4,
      Subclasses:[],
    }]
},
{
    Description: "Product4"
    IsInstanciable: false
    IsMasked: false
    Name: "ProductBase4",
    Count: '...',
    Subclasses: [...]
}
我想从上面的数组递归地创建一个JSON对象。它将如下所示:

[
  {
    name: 'Product',
    Count: 9,
    children: [
      {name: 'Product2'},
      {name: 'Product3'},
    ]
  }, {
    name: 'Product4',
    children: [
      {
        name: '...',
        Count: 'Sum of Count in all children by level'
        children: [
          {name: '...'},
          {name: '...'},
        ]
      }
    ]
  },
];
function MapObject(object) {
  if(!object || object.length < 0) return [];

  return object.map(obj => { return {
      name: obj.Description,
      children: MapObject(obj.Subclasses)
  }});
}
这是我在typescript中的递归函数,但它没有按预期工作。我怎样才能解决这个问题

递归(数据,堆栈:TreeNode[]){ 让elt:TreeNode={name:'',子项:[]} 如果(data.subclass.length>0){ elt.name=data.Description; data.subclass.forEach(元素=>{ elt.children.push({name:element.Description}); 递归(元素、堆栈); }); }否则{ elt.name=data.Description; } 堆栈推送(elt); }
您可以将map函数与递归函数一起使用,如下所示:

[
  {
    name: 'Product',
    Count: 9,
    children: [
      {name: 'Product2'},
      {name: 'Product3'},
    ]
  }, {
    name: 'Product4',
    children: [
      {
        name: '...',
        Count: 'Sum of Count in all children by level'
        children: [
          {name: '...'},
          {name: '...'},
        ]
      }
    ]
  },
];
function MapObject(object) {
  if(!object || object.length < 0) return [];

  return object.map(obj => { return {
      name: obj.Description,
      children: MapObject(obj.Subclasses)
  }});
}
函数映射对象(对象){
如果(!object | | object.length<0)返回[];
return object.map(obj=>{return{
名称:对象描述,
子类:MapObject(对象子类)
}});
}
下面是一个完整的工作示例:

var示例=[{
说明:“产品”,
IsInstanced:错误,
问:错,
名称:“ProductBase”,
子类:[{
说明:“产品2”,
IsInstanced:错误,
问:错,
名称:“ProductBase2”,
子类:[]
},
{
说明:“产品3”,
IsInstanced:错误,
问:错,
名称:“ProductBase3”,
子类:[]
}]
},
{
说明:“产品4”,
IsInstanced:错误,
问:错,
名称:“ProductBase4”
}]
函数映射对象(对象){
如果(!object | | object.length<0)返回[];
return object.map(obj=>{return{
名称:对象描述,
子类:MapObject(对象子类)
}});
}

log(MapObject(示例))我会将其分解为几个单独的功能,并明确职责:

const sum=(ns)=>
ns.减少((a,b)=>a+数字(b),0)
const getCount=(产品)=>
(product.Count | | 0)+sum((product.subclass | |[]).map(getCount))
常量提取=(产品)=>
({
名称:产品名称,
计数:getCount(产品),
子类:product.subclass.map(摘录)
})
const extractAll=(产品)=>
产品.地图(摘录)
const products=[{“Description”:“Product”,“isinstanced”:false,“ismask”:false,“Name”:“ProductBase”,“subclass”:[{“Count”:5,“Description”:“Product2”,“isinstanced”:false,“ismask”:false,“Name”:“ProductBase2”,“subclass”:[]},{“Count”:4,“Description”:“Product3”,“isinstanced”:false,“ismask”:false,“Name”:“ProductBase3”,“子类”:[]}],{“计数”:3,“描述”:“Product4”,“IsInstanced”:false,“IsMask”:false,“名称”:“ProductBase4”,“子类”:[]}]
控制台日志(
抽提物(产品)

)
Hi Ricardo,如果我想按级别添加所有计数属性的总和,该怎么办?谢谢你能举一个json的例子吗?我修改了上面问题中的json例子