我在下面的帖子中引用了lodash groupby key if exist in collection,并返回了以下结构。
{
"sec": "11",
"details": [{
"id": "1",
"user": "Me1"
},
{
"id": "2",
"uesr": "Me2",
"childs": [{
"id": "4",
"user": "Me4",
"parentID": "2"
},
{
"id": "6",
"user": "Me6",
"parentID": "2"
}
]
},
{
"id": "3",
"user": "Me3"
},
{
"id": "5",
"uesr": "Me5"
},
{
"id": "7",
"user": "Me7",
"childs": [{
"id": "8",
"uesr": "Me8",
"parentID": "7"
},
{
"id": "9",
"user": "Me9",
"parentID": "7"
}
]
}
],
"isDisplay": "true"
}
我需要获取所有嵌套项目的总数,例如在第11秒中,有9个项目。
答案 0 :(得分:2)
您可以获取内部数组的数量,并将此值计数到实际水平。
const
getCount = (s, { childs }) => (childs || []).reduce(getCount, s + 1),
data = { sec: "11", details: [{ id: "1", user: "Me1" }, { id: "2", uesr: "Me2", childs: [{ id: "4", user: "Me4", parentID: "2" }, { id: "6", user: "Me6", parentID: "2" }] }, { id: "3", user: "Me3" }, { id: "5", uesr: "Me5" }, { id: "7", user: "Me7", childs: [{ id: "8", uesr: "Me8", parentID: "7" }, { id: "9", user: "Me9", parentID: "7" }] }], isDisplay: "true" },
count = data.details.reduce(getCount, 0);
console.log(count);
答案 1 :(得分:0)
您可以使用递归function
对所有项目进行计数,该递归.forEach()
在给定的array
上使用简单的var items = 0;
function countItems(arr) {
arr.forEach(a => {
items += 1;
if (a.childs)
countItems(a.childs);
});
}
countItems(data.details);
调用。
这应该是您的代码:
var data = {
"sec": "11",
"details": [{
"id": "1",
"user": "Me1"
},
{
"id": "2",
"uesr": "Me2",
"childs": [{
"id": "4",
"user": "Me4",
"parentID": "2"
},
{
"id": "6",
"user": "Me6",
"parentID": "2"
}
]
},
{
"id": "3",
"user": "Me3"
},
{
"id": "5",
"uesr": "Me5"
},
{
"id": "7",
"user": "Me7",
"childs": [{
"id": "8",
"uesr": "Me8",
"parentID": "7"
},
{
"id": "9",
"user": "Me9",
"parentID": "7"
}
]
}
],
"isDisplay": "true"
};
var items = 0;
function countItems(arr) {
arr.forEach(a => {
items += 1;
if (a.childs)
countItems(a.childs);
});
}
countItems(data.details);
console.log(items);
演示:
YourTableAdapter.Update(YourDataSet.YourDB);
答案 2 :(得分:0)
假定您将提取Settings::where('name', 'elastic_automation')->update(['value' => 'Y']);
对象。您可以使用Array.reduce和递归函数来获取结果。
sec-11