Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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_Object_Dictionary_Nested - Fatal编程技术网

Javascript 将嵌套对象数组转换为类似JSON的对象?

Javascript 将嵌套对象数组转换为类似JSON的对象?,javascript,arrays,object,dictionary,nested,Javascript,Arrays,Object,Dictionary,Nested,我在很多地方都找过这个,但找不到类似的东西。我需要像这样变换嵌套的对象的数组: var currentArr = [ { name: 'Michael', children: ['Lara'] }, { name: 'Susy', children: ['Mike','Ana','Mary'] }, { name: 'Bruno', children: ['Clark'] } ] 进入一个JSON对象,如下所示: var re

我在很多地方都找过这个,但找不到类似的东西。我需要像这样变换嵌套的
对象的
数组

var currentArr = [ 
  { name: 'Michael',   
    children: ['Lara'] 
  },
  { name: 'Susy',    
    children: ['Mike','Ana','Mary']
  },
  { name: 'Bruno', 
    children: ['Clark']
  }
]
进入一个
JSON
对象,如下所示:

var result = [
    { 'name' : 'Michael', 
      'children': [
            { 'name' : 'Lara' }
    },
    { 'name' : 'Susy', 
      'children': [
            { 'name' : 'Mike' },
            { 'name' : 'Ana' },
            { 'name' : 'Mary' }
      ]
    },
    { 'name' : 'Bruno', 
       'children': [
            { 'name' : 'Clark' }
        ]
    }
]
我尝试过使用
reduce
map
nested,但我一直无法让它按照我想要的方式构建。特别是当从
子对象
循环字符串数组时,我需要返回一个映射结果,其中
名称
作为键

它需要嵌套为
结果
,而
currentArr
将是入口点

var currentObj=[
{姓名:'迈克尔',
儿童:[“劳拉”]
},
{名称:'Susy',
孩子:[“迈克”、“安娜”、“玛丽”]
},
{名称:'布鲁诺',
儿童:[“克拉克”]
}
]

对于(var i=0,j=currentObj.length;i您可以映射每个
子数组
并返回一个新对象

var currentObj=[
{姓名:'迈克尔',
儿童:[“劳拉”]
},
{名称:'Susy',
孩子:[“迈克”、“安娜”、“玛丽”]
},
{名称:'布鲁诺',
儿童:[“克拉克”]
}
].map(功能(项目){
item.children=item.children.map(函数(子函数){
返回{name:child};
});
退货项目;
});

console.log(currentObj);
这样原始数组就不会被修改:

var result = current.map(function (parent) {
    return {
        name: parent.name,
        children: parent.children.map(function (name) {
            return { name: name };
        })
    };
});

// if you want a JSON string representing the result object
var resultJSON = JSON.stringify(result);

另外,正如其他人所指出的,原始代码片段中的
resultObj
不是有效的对象。也许您是想让它成为一个数组?

如果可以就地修改当前数组,此ES2015代码就足够了:

currentArr.forEach(function(p) {
    p.children = p.children.map(name => ({ name }));
});
arrow函数的返回值利用了新的ES2015语法,即对象文字中没有值的裸键取该名称变量的当前值,即,它与写入
{“name”:name}


为了防止大括号被解释为函数体而不是对象文字,需要附加括号。

我会这样做:

var result = [
    { 'name' : 'Michael', 
      'children': [
            { 'name' : 'Lara' }
    },
    { 'name' : 'Susy', 
      'children': [
            { 'name' : 'Mike' },
            { 'name' : 'Ana' },
            { 'name' : 'Mary' }
      ]
    },
    { 'name' : 'Bruno', 
       'children': [
            { 'name' : 'Clark' }
        ]
    }
]
var currentArr=[{name:'Michael',children:['Lara']},{name:'Susy',children:['Mike','Ana','Mary']},{name:'Bruno',children:['Clark']}]
const map=data=>data.map(父=>(
parent.children.map(
child=>({name:child})),父
))

log(JSON.stringify(map(currentArr),null,4))
resultObj
应该是一个数组,对吗?这不是一个有效的JSON对象。对象的元素是
key:value
对,但顶级对象没有任何键。另外,这不是JSON——JSON是一个符号,你不遵守它。任何人如果认为他们现在能够回答这个问题,都不能,因为OP要求的输出是不可能的。@JuanMendes查看编辑历史记录。他最初在数组中有
{}
,而不是
[]
。在这个上下文中谈论JSON是令人困惑的,因为JSON是一种符号,这里我们处理的是对象。