首页 > 解决方案 > Groupby一个数组并使用jquery获取元素作为子数组

问题描述

我有一个像下面这样的数组,需要用子数组转换这个数组

[{作者:“”类别:“test1”日期:“2020年9月8日”扩展名:null id:5 maintitle:“test”siteName:“site1”title:“test1”url:“”},

{作者:“”类别:“test1”日期:“2020 年 9 月 10 日”扩展名:null id:4 maintitle:“test2”siteName:“site1”title:“test2”url:“”},

{作者:“”类别:“test3”日期:“2020 年 9 月 2 日”扩展名:null id:1 主标题:“test3”站点名称:“Site3”标题:“test3”url:“”}]

输出将如下所示:

[{
    id: 1,
    date: "8 September 2020",
    title: test1,
    category: test1,
    "files": {
      "Site1": [{
          author: " "
          date: "8 September 2020",
          extension: null,
          title: "test1"
        }, {
          author: " ",
          date: "10 September 2020"
          extension: null,
          title: "test2"
          url: ""
        }
      ]
    }
  },
  [{
      id: 2,
      date: "8 September 2020",
      title: "test3",
      category: "test3",
      "files": {
        "site3": [{
          author: " ",
          date: "30 August 2020",
          extension: null,
          title: "test3",
          url: ""
        }]
      }]
      }]

Groupby 需要使用 Jquery/javascript 处理站点名称和类别。请帮助我。任何帮助深表感谢。

标签: javascriptjqueryarrays

解决方案


您可以为所需组采用一个数组,并为嵌套数组采用迭代方法。

const
    data = [{ author: "Merin", category: "Forms", date: "8 September 2020", documentName: "Credit1 Forms", documentUrl: "", id: 5, siteName: "Credit", title: "Forms" }, { author: "Sandeep", category: "Forms", date: "10 September 2020", documentName: "AFAD1 Forms", documentUrl: "#", id: 4, siteName: "Credit", title: "Forms" }, { author: "Jithin", category: "Policies", date: "2 September 2020", documentName: "Credit1 Manuel", documentUrl: "#", id: 1, siteName: "Credit", title: "Policies" }],
    groups = [['category', 'files'], ['siteName']],
    result = data.reduce((r, o) => {
        groups
            .reduce((p, [key, children = o[key]], i) => {
                let value, group;
                ({ [key]: value, ...o } = o);
                group = p.find(g => g[key] === value);
                if (!group) p.push(group = { ...(i === 0 ? { id: p.length + 1 } : {}), [key]: value, [children]: [] });
                return group[children];
            }, r)
            .push(o);
        return r;
    }, []);
  
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读