2 回答
![?](http://img1.sycdn.imooc.com/54584ed2000152a202200220-100-100.jpg)
TA贡献1834条经验 获得超8个赞
您可以将 map 函数与递归函数一起使用,如下所示:
function MapObject(object) {
if(!object || object.length < 0) return [];
return object.map(obj => { return {
name: obj.Description,
children: MapObject(obj.Subclasses)
}});
}
遵循完整的工作示例:
var example = [{
Description: "Product",
IsInstanciable: false,
IsMasked: false,
Name: "ProductBase",
Subclasses: [{
Description: "Product2",
IsInstanciable: false,
IsMasked: false,
Name: "ProductBase2",
Subclasses:[]
},
{
Description: "Product3",
IsInstanciable: false,
IsMasked: false,
Name: "ProductBase3",
Subclasses:[]
}]
},
{
Description: "Product4",
IsInstanciable: false,
IsMasked: false,
Name: "ProductBase4"
}]
function MapObject(object) {
if(!object || object.length < 0) return [];
return object.map(obj => { return {
name: obj.Description,
children: MapObject(obj.Subclasses)
}});
}
console.log(MapObject(example));
![?](http://img1.sycdn.imooc.com/54585094000184e602200220-100-100.jpg)
TA贡献1853条经验 获得超6个赞
我会将其分解为几个具有明确职责的独立功能:
const sum = (ns) =>
ns .reduce ((a, b) => a + Number (b), 0)
const getCount = (product) =>
(product .Count || 0) + sum ((product .Subclasses || []) .map (getCount))
const extract = (product) =>
({
name: product .Name,
count: getCount (product),
children: product .Subclasses .map (extract)
})
const extractAll = (products) =>
products .map (extract)
const products = [{"Description": "Product", "IsInstanciable": false, "IsMasked": false, "Name": "ProductBase", "Subclasses": [{"Count": 5, "Description": "Product2", "IsInstanciable": false, "IsMasked": false, "Name": "ProductBase2", "Subclasses": []}, {"Count": 4, "Description": "Product3", "IsInstanciable": false, "IsMasked": false, "Name": "ProductBase3", "Subclasses": []}]}, {"Count": 3, "Description": "Product4", "IsInstanciable": false, "IsMasked": false, "Name": "ProductBase4", "Subclasses": []}]
console .log (
extractAll (products)
)
(请注意,我更改了 outputcount属性的大小写。它似乎更符合name和children。)
我们通过对象递归获取它的Count属性,我们单独递归获取对象的其余部分。虽然可能有一种方法可以将这些结合起来,但我预计代码会更加复杂。
请注意,我假设所有Count属性实际上都是数字,尽管上面的示例包含一个字符串。如果您确实有类似 的值"3",则getCount需要更复杂一些。
添加回答
举报