SharePoint Online - SPFx - 如何在 PnPjs 中使用 GroupBy

SharePoint Online - SPFx - How to use GroupBy in PnPjs

我是 SPFx PnPjs 的新手。我想在查询中使用 GroupBy 但在可视代码中看不到智能感知。这是我的查询:

var query = pnp.sp.web.lists.getByTitle("Employee").items.select("ID,Title").filter(filterstring).get();

我想要这样的输出:

var query = pnp.sp.web.lists.getByTitle("Employee").items.GroupBy("Title").select("ID,Title").filter(filterstring).get();

关于如何在上述查询中使用“GroupBy”的任何建议?

无法在 pnp js 中使用 GroupBy,因为它不存在。

但是,您可以在javascript中获取数据后进行分组。

例如,你有一些接口来存储结果数据,像这样:

interface IData{
  Id: number;
  Title: string;
}

interface IGroups{
    Title: string;
    Ids: number[];
}

获得请求响应后,创建对象数组

let result: IData[] = [];

query.then((items)=>{
    items.map((item)=>{
      result.push({Id: item.ID, Title: item.Title});
    });
});

在此之后你得到未分组的数据,你可以通过过滤对其进行分组:

let groups: IGroups[] = [];
result.map((item)=>{
   //get only titles for grouping
   return item.title;
}).filter((value, index, self)=>{
    //get unique values
    return self.indexOf(value)===index
}).map((item)=>{
    //Here you get distinct title - you groups
    //and creating groups
    groups.push({
        Title: item,
        Ids: result.filter((r)=>{return r.title === item})
    });
});

SharePoint Rest API 不支持 GroupBy,您可以获得所有支持的 OData 查询操作 here

PNP js是对Sharepoint Rest的封装API,所以目前还不支持group by

作为解决方法,您可以在 return 值中过滤掉所需的项目。Array.prototype.filter()