查找嵌套数组的对象子级的长度



我有一个JavaScript对象。有没有一种内置的或公认的最佳实践方法来获取所有子元素的长度,在这种情况下,对于数组中的第一个对象,它应该是1,对于第二个对象,它应该是2,总数减少到3。

const testData = [
{
account: "A",
children: [
{
account: "Test",
children: [],
},
],
}, {
account: "B",
children: [
{
account: "Test1",
children: [],
},
{
account: "Test2",
children: [],
},
],
},
]

递归解,如果需要的话

const testData = [
{
account: "A",
children: [
{
account: "Test",
children: [{account:"Test-Grandchild", children:[{account:"Test-Great-Grandchild", children:[]}]}],
},
],
}, {
account: "B",
children: [
{
account: "Test1",
children: [],
},
{
account: "Test2",
children: [],
},
],
},
]
const countChildren = obj => obj.children.length + obj.children.reduce((acc,c) => acc + countChildren(c), 0 );
const result = testData.reduce ( (acc,c) => acc + countChildren(c),0)
console.log(result);

当然,Array.reduce

const nOfTestDataChildren = [
{
account: "A",
children: [
{
account: "Test",
children: [],
},
],
}, {
account: "B",
children: [
{
account: "Test1",
children: [],
},
{
account: "Test2",
children: [],
},
],
},
].reduce( (acc, val) => acc + val.children.length, 0);
console.log(nOfTestDataChildren);

我认为Kooilnic的答案非常适合这种情况,因为我们正在将数组减少为单个数值,它应该被接受为实际答案。但我想提出另一个解决方案,使用Array.forEach:

const testData = [
{
account: "A",
children: [
{
account: "Test",
children: [],
},
],
}, {
account: "B",
children: [
{
account: "Test1",
children: [],
},
{
account: "Test2",
children: [],
},
],
},
]
let numberOfChildren = 0
testData.forEach(datum => numberOfChildren += datum.children.length)
console.log({ numberOfChildren })

最新更新