【问题标题】:linqts - group by multiple propertieslinqts - 按多个属性分组
【发布时间】:2019-08-12 08:58:48
【问题描述】:

我有一个 JSON 对象数组,它们必须按多个属性分组。

const JSON_DATA = [
        {"componentName":"CP1","articleNumber":"441","componentType":"Ext","version":"V1.1.6"},
        {"componentName":"CP5","articleNumber":"444","componentType":"Int","version":"V2.1.8"},
        {"componentName":"CP5","articleNumber":"444","componentType":"Ext","version":"V2.1.0"},
        {"componentName":"CP5","articleNumber":"444","componentType":"Ext","version":"V2.1.8"},
        {"componentName":"CP4","articleNumber":"442","componentType":"Ext","version":"V1.1.0"}];

我想使用 linqts 按 componentName、articleNumber 和 componentType 进行分组。

interface IComponent {
  componentName: String;
  articleNumber: String;
  componentType: String;
  version: String;
}

class JsonGroupBy {
  public groupBy(data: IComponent[]): any {
    let mylist = new List < IComponent > (data);

    let result = mylist.GroupBy((comp) => comp.componentName, (comp) => comp.version);

    return result;
  }
}

这是可行的,但我不知道如何不仅按 componentName 分组,还按 articleNumber 和 componentType 分组。当前输出如下所示:

{"CP1": ["V1.1.6"], "CP4": ["V1.1.0"], "CP5": ["V2.1.8", "V2.1.0", "V2.1.8"]}

我喜欢的结果是这样的:

   
  [
    {"componentName": "CP1","articleNumber":"441","componentType":"Ext","version": ["V1.1.6"]},
    {"componentName": "CP5","articleNumber":"444","componentType":"Int","version": ["V2.1.8"]},
    {"componentName": "CP5","articleNumber":"444","componentType":"Ext","version": ["V2.1.0","2.1.8"]},
    {"componentName": "CP4","articleNumber":"442","componentType":"Ext","version": ["V1.1.0"]}
]

【问题讨论】:

  • linqtslinqjs 几乎相同吗?
  • @Nina Scholz 不一样,但如果你能提供一个,我会采用 linqjs 解决方案。

标签: javascript typescript linq group-by linq.js


【解决方案1】:

您可以收集版本并为每个组构建一​​个新数据集。

const
    JSON_DATA = [{ componentName: "CP1", articleNumber: "441", componentType: "Ext", version: "V1.1.6" }, { componentName: "CP5", articleNumber: "444", componentType: "Int", version: "V2.1.8" }, { componentName: "CP5", articleNumber: "444", componentType: "Ext", version: "V2.1.0" }, { componentName: "CP5", articleNumber: "444", componentType: "Ext", version: "V2.1.8" }, { componentName: "CP4", articleNumber: "442", componentType: "Ext", version: "V1.1.0" }],
    result = Enumerable
        .From(JSON_DATA)
        .GroupBy(
            null,
            "$.version",
            "{ componentName: $.componentName, articleNumber: $.articleNumber, componentType: $.componentType, version: $$.ToArray() }",
            "[$.componentName, $.articleNumber, $.componentType].join('|')"
        )
        .ToArray();

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/linq.js/2.2.0.2/linq.js"&gt;&lt;/script&gt;

【讨论】:

    猜你喜欢
    • 2014-01-02
    • 2017-03-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多