获取所有嵌套项目的计数

时间:2018-11-21 13:16:14

标签: javascript angular

我在下面的帖子中引用了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个项目。

3 个答案:

答案 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