将数组转换为嵌套对象 javascript
Convert arrays to nested objects javascript
我有一个对象数组,如下所示:
var tryArray = [{
name: 'name1',
subname: 'subname1',
symbolname: 'symbol1'
},
{
name: 'name1',
subname: 'subname11',
symbolname: 'symbol11'
},
{
name: 'name2',
subname: 'subname2',
symbolname: 'symbol2'
},
{
name: 'name2',
subname: 'subname22',
symbolname: 'symbol22'
},
{
name: 'name3',
subname: 'subname3',
symbolname: 'symbol3'
},
{
name: 'name3',
subname: 'subname33',
symbolname: 'symbol33'
}];
我想将此数组转换为嵌套对象,其中名称是子名称的父级,子名称是符号名的父级。例如:
result = {
name1: {
subname1: [symbolname1],
subname11: [symbolname11]
},
name2: {
subname2: [symbolname2],
subname22: [symbolname22]
},
name3: {
subname3: [symbolname3],
subname33: [symbolname33]
}
}
我试过像这样使用 reduce
tryArray.reduce((object, item) => {
object[item.name] = {[item.subname]: [item.symbolname]}
},{})
但它只返回了一个子名称。任何想法如何解决这个问题,非常感谢
reduce
需要一个 return 值,例如:
var tryArray = [{"name":"name1","subname":"subname1","symbolname":"symbol1"},{"name":"name1","subname":"subname11","symbolname":"symbol11"},{"name":"name2","subname":"subname2","symbolname":"symbol2"},{"name":"name2","subname":"subname22","symbolname":"symbol22"},{"name":"name3","subname":"subname3","symbolname":"symbol3"},{"name":"name3","subname":"subname33","symbolname":"symbol33"}]
var result = tryArray.reduce((object, item) => {
object[item.name] = object[item.name] || {}; //Need to init name if not exst
object[item.name][item.subname] = [item.symbolname];
return object;
}, {})
console.log( result );
如果您在 subname
中有多个 symbolname
,您可以:
var tryArray = [{"name":"name1","subname":"subname1","symbolname":"symbol1"},{"name":"name1","subname":"subname11","symbolname":"symbol11"},{"name":"name2","subname":"subname2","symbolname":"symbol2"},{"name":"name2","subname":"subname22","symbolname":"symbol22"},{"name":"name3","subname":"subname3","symbolname":"symbol3"},{"name":"name3","subname":"subname33","symbolname":"symbol33"}];
var result = tryArray.reduce((object, item) => {
object[item.name] = object[item.name] || {}; //Need to init name if not exist
object[item.name][item.subname] = object[item.name][item.subname] || []; //Need to subname name if not exist
object[item.name][item.subname].push(item.symbolname); //Push the symbolname
return object;
}, {});
console.log(result);
我有一个对象数组,如下所示:
var tryArray = [{
name: 'name1',
subname: 'subname1',
symbolname: 'symbol1'
},
{
name: 'name1',
subname: 'subname11',
symbolname: 'symbol11'
},
{
name: 'name2',
subname: 'subname2',
symbolname: 'symbol2'
},
{
name: 'name2',
subname: 'subname22',
symbolname: 'symbol22'
},
{
name: 'name3',
subname: 'subname3',
symbolname: 'symbol3'
},
{
name: 'name3',
subname: 'subname33',
symbolname: 'symbol33'
}];
我想将此数组转换为嵌套对象,其中名称是子名称的父级,子名称是符号名的父级。例如:
result = {
name1: {
subname1: [symbolname1],
subname11: [symbolname11]
},
name2: {
subname2: [symbolname2],
subname22: [symbolname22]
},
name3: {
subname3: [symbolname3],
subname33: [symbolname33]
}
}
我试过像这样使用 reduce
tryArray.reduce((object, item) => {
object[item.name] = {[item.subname]: [item.symbolname]}
},{})
但它只返回了一个子名称。任何想法如何解决这个问题,非常感谢
reduce
需要一个 return 值,例如:
var tryArray = [{"name":"name1","subname":"subname1","symbolname":"symbol1"},{"name":"name1","subname":"subname11","symbolname":"symbol11"},{"name":"name2","subname":"subname2","symbolname":"symbol2"},{"name":"name2","subname":"subname22","symbolname":"symbol22"},{"name":"name3","subname":"subname3","symbolname":"symbol3"},{"name":"name3","subname":"subname33","symbolname":"symbol33"}]
var result = tryArray.reduce((object, item) => {
object[item.name] = object[item.name] || {}; //Need to init name if not exst
object[item.name][item.subname] = [item.symbolname];
return object;
}, {})
console.log( result );
如果您在 subname
中有多个 symbolname
,您可以:
var tryArray = [{"name":"name1","subname":"subname1","symbolname":"symbol1"},{"name":"name1","subname":"subname11","symbolname":"symbol11"},{"name":"name2","subname":"subname2","symbolname":"symbol2"},{"name":"name2","subname":"subname22","symbolname":"symbol22"},{"name":"name3","subname":"subname3","symbolname":"symbol3"},{"name":"name3","subname":"subname33","symbolname":"symbol33"}];
var result = tryArray.reduce((object, item) => {
object[item.name] = object[item.name] || {}; //Need to init name if not exist
object[item.name][item.subname] = object[item.name][item.subname] || []; //Need to subname name if not exist
object[item.name][item.subname].push(item.symbolname); //Push the symbolname
return object;
}, {});
console.log(result);