typescript对json数据中数组中相同对象的值进行分组?

           {
                "rownum":"3",
                "colnum":"1",
                "colCd":"rb_Indiv_Invc_Dt",
                "Label":"单个(&V)",
                "isRequired":"false",
                "ctlType":"Radio",
                "show":"false",
                "size":"16",
                "value":""},
            {
                "rownum":"3",
                "colnum":"2",
                "colCd":"cmb_Indiv_Invc_Dt",
                "Label":"",
                "dataType":"Date",
                "isRequired":"false",
                "ctlType":"TextBox",
                "show":"false",
                "edit":"true",
                "size":"20",
                "rows":"5",
                "picker":"'{mutlValue:true}'",
                "value":""},
            {
                "rownum":"4",
                "colnum":"1",
                "colCd":"rb_Range_Invc_Dt",
                "Label":"范围(&R)",
                "isRequired":"false",
                "ctlType":"Radio",
                "show":"false",
                "size":"12",
                "value":""},
            {
                "rownum":"5",
                "colnum":"1",
                "colCd":"dfs_Curr_Pref",
                "Label":"",
                "dataType":"String",
                "isRequired":"false",
                "ctlType":"TextBox",
                "show":"false",
                "edit":"true",
                "size":"12",
                "rows":"4",
                "value":""},
            {
                "rownum":"5",
                "colnum":"2",
                "colCd":"dfdt_RangeTo_Invc_Dt",
                "Label":"",
                "dataType":"DateTime",
                "isRequired":"false",
                "ctlType":"TextBox",
                "show":"false",
                "edit":"true",
                "size":"16",
                "maxLength":"30",
                "picker":"js:dateTimePicker()",
                "value":""},
            {
                "rownum":"6",
                "colnum":"1",
                "colCd":"dfdt_RangeFrom_Invc_Dt",
                "Label":"",
                "dataType":"DateTime",
                "isRequired":"false",
                "ctlType":"TextBox",
                "show":"false",
                "edit":"true",
                "size":"16",
                "maxLength":"30",
                "picker":"js:dateTimePicker()",
                "value":""},

typeScript通过JSON中rownum,colnum相同的分别进行分组

阅读 2.3k
2 个回答

核心思想就是通过Mapping来分组

const group = <T extends Record<string, any>, K extends keyof T>(
  list: T[],
  key: K
) => {
  const mapping: Partial<Record<T[K], T[]>> = {};
  list.forEach((each) => {
    const group = each[key];
    if (!mapping[group]) mapping[group] = [];
    mapping[group]!.push(each);
  });
  return mapping;
};

group(data, "rownum")
group(data, "colnum")

这里返回结果是对象, 如果想要返回数组就直接Object.values即可

用Key分别分组, 这样可能是你想要的。

const groupBy = <T, K extends keyof any>(arr: T[], key: (i: T) => K) =>
  arr.reduce((groups, item) => {
    (groups[key(item)] ||= []).push(item);
    return groups;
  }, {} as Record<K, T[]>);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进