通过嵌套键对数组进行分组

木海民CS

有谁知道ES6或Ramda通过对象密钥对对象数组进行分组然后基于分组创建新对象数组的方法吗?例如,我有一个对象数组,如下所示:

[
  {
    "name": "ABCD123",
    "code": "GFDGF",
    "ptj": {
      "code": "123",
      "desc": "ABCD 123"
    }
  },
  {
    "name": "ANGGUN",
    "code": "DSFD54",
    "ptj": {
      "code": "111",
      "desc": "111 123"
    }
  },
  {
    "name": "GDFDGG",
    "code": "HJ2",
    "ptj": {
      "code": "111",
      "desc": "111 123"
    }
  },
  {
    "name": "POT",
    "code": "POT89",
    "ptj": {
      "code": "222",
      "desc": "222 123"
    }
  },
  {
    "name": "POTER UTAMA",
    "code": "POTER345",
    "ptj": {
      "code": "123",
      "desc": "ABCD 123"
    }
  },
  {
    "name": "ABCD123ABCD",
    "code": "LOLL23",
    "ptj": {
      "code": "123",
      "desc": "ABCD 123"
    }
  },
  {
    "name": "ANGGUN 2",
    "code": "DSFD54",
    "ptj": {
      "code": "111",
      "desc": "111 123"
    }
  },
  {
    "name": "GDFDGG",
    "code": "HJ2",
    "ptj": {
      "code": "111",
      "desc": "111 123"
    }
  },
  {
    "name": "POT",
    "code": "POT89",
    "ptj": {
      "code": "222",
      "desc": "222 123"
    }
  },
  {
    "name": "POTER UTAMA",
    "code": "POTER345",
    "ptj": {
      "code": "123",
      "desc": "ABCD 123"
    }
  }
]

我想有一个按ptj.desc分组的新数组ptj.code

[
  {
    "PTJ": "ABCD 123",
    "data": [
      {
        "name": "ABCD123",
        "code": "GFDGF",
        "ptj": {
          "code": "123",
          "desc": "ABCD 123"
        }
      },
      {
        "name": "POTER UTAMA",
        "code": "POTER345",
        "ptj": {
          "code": "123",
          "desc": "ABCD 123"
        }
      },
      {
        "name": "ABCD123ABCD",
        "code": "LOLL23",
        "ptj": {
          "code": "123",
          "desc": "ABCD 123"
        }
      },
      {
        "name": "POTER UTAMA",
        "code": "POTER345",
        "ptj": {
          "code": "123",
          "desc": "ABCD 123"
        }
      }
    ]
  },
  {
    "PTJ": "111 123",
    "data": [
      {
        "name": "ANGGUN",
        "code": "DSFD54",
        "ptj": {
          "code": "111",
          "desc": "111 123"
        }
      },
      {
        "name": "GDFDGG",
        "code": "HJ2",
        "ptj": {
          "code": "111",
          "desc": "111 123"
        }
      },
      {
        "name": "ANGGUN 2",
        "code": "DSFD54",
        "ptj": {
          "code": "111",
          "desc": "111 123"
        }
      },
    ]
  },
  {
    "PTJ": "222 123",
    "data": [
      {
        "name": "POT",
        "code": "POT89",
        "ptj": {
          "code": "222",
          "desc": "222 123"
        }
      },
      {
        "name": "POT",
        "code": "POT89",
        "ptj": {
          "code": "222",
          "desc": "222 123"
        }
      },
    ]
  }
]

到目前为止,我所拥有的是

const stores = myArray.reduce((r, a) => {
    r[a.ptj.desc] = r[a.ptj.desc] || [];
    r[a.ptj.desc].push(a);
    return r;
}, {});

不幸的是,它转换为对象,我不能使用array.map我做错什么了?我欢迎使用ES6或ramda进行更正和改进。提前致谢

斯科特·克里斯托弗

如果您只想将具有相同ptj.desc的对象分组,而又不介意结果值是具有键索引的对象,则可以R.groupBy这样使用

const data = [
  {
    "name": "ABCD123",
    "code": "GFDGF",
    "ptj": {
      "code": "123",
      "desc": "ABCD 123"
    }
  },
  {
    "name": "ANGGUN",
    "code": "DSFD54",
    "ptj": {
      "code": "111",
      "desc": "111 123"
    }
  },
  {
    "name": "GDFDGG",
    "code": "HJ2",
    "ptj": {
      "code": "111",
      "desc": "111 123"
    }
  },
  {
    "name": "POT",
    "code": "POT89",
    "ptj": {
      "code": "222",
      "desc": "222 123"
    }
  },
  {
    "name": "POTER UTAMA",
    "code": "POTER345",
    "ptj": {
      "code": "123",
      "desc": "ABCD 123"
    }
  },
  {
    "name": "ABCD123ABCD",
    "code": "LOLL23",
    "ptj": {
      "code": "123",
      "desc": "ABCD 123"
    }
  },
  {
    "name": "ANGGUN 2",
    "code": "DSFD54",
    "ptj": {
      "code": "111",
      "desc": "111 123"
    }
  },
  {
    "name": "GDFDGG",
    "code": "HJ2",
    "ptj": {
      "code": "111",
      "desc": "111 123"
    }
  },
  {
    "name": "POT",
    "code": "POT89",
    "ptj": {
      "code": "222",
      "desc": "222 123"
    }
  },
  {
    "name": "POTER UTAMA",
    "code": "POTER345",
    "ptj": {
      "code": "123",
      "desc": "ABCD 123"
    }
  }
]

const fn = R.groupBy(R.path(['ptj','desc']))

console.log(fn(data))
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>

如果确实希望获得与问题示例相同的结构,则可以使用组成上述内容R.map如下所示:R.zipObjR.toPairs

const data = [
  {
    "name": "ABCD123",
    "code": "GFDGF",
    "ptj": {
      "code": "123",
      "desc": "ABCD 123"
    }
  },
  {
    "name": "ANGGUN",
    "code": "DSFD54",
    "ptj": {
      "code": "111",
      "desc": "111 123"
    }
  },
  {
    "name": "GDFDGG",
    "code": "HJ2",
    "ptj": {
      "code": "111",
      "desc": "111 123"
    }
  },
  {
    "name": "POT",
    "code": "POT89",
    "ptj": {
      "code": "222",
      "desc": "222 123"
    }
  },
  {
    "name": "POTER UTAMA",
    "code": "POTER345",
    "ptj": {
      "code": "123",
      "desc": "ABCD 123"
    }
  },
  {
    "name": "ABCD123ABCD",
    "code": "LOLL23",
    "ptj": {
      "code": "123",
      "desc": "ABCD 123"
    }
  },
  {
    "name": "ANGGUN 2",
    "code": "DSFD54",
    "ptj": {
      "code": "111",
      "desc": "111 123"
    }
  },
  {
    "name": "GDFDGG",
    "code": "HJ2",
    "ptj": {
      "code": "111",
      "desc": "111 123"
    }
  },
  {
    "name": "POT",
    "code": "POT89",
    "ptj": {
      "code": "222",
      "desc": "222 123"
    }
  },
  {
    "name": "POTER UTAMA",
    "code": "POTER345",
    "ptj": {
      "code": "123",
      "desc": "ABCD 123"
    }
  }
]

const fn = R.groupBy(R.path(['ptj','desc']))

const fn2 = R.compose(R.map(R.zipObj(['PTJ', 'data'])), R.toPairs, fn)

console.log(fn2(data))
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

通过嵌套从属数组元素对数组进行分组

如何通过PHP中的多个键对数组进行分组

如何通过第一个元素对象键对数组中的数组进行分组

通过值对数组进行分组

如何通过JavaScript中的对象键之一对数组进行分组

通过多个键对数组进行分组并更改键名 JavaScript

按嵌套数组对数组进行分组

通过通用键对对象数组进行分组,将嵌套属性合并到数组中

如何通过使用数组值对数组进行分组,PHP

希望通过子数组中的值对数组进行分组

如何使用嵌套分组对数组进行分页?

根据Lua中的键对数组值进行分组?

PHP-通过arrays键对数组数组进行排序

通过父ID对象Ramda对数组进行分组

通过线性比较对数组进行分组

如果特定键匹配,则使用相同键对数组值进行分组

如何根据PHP中的内部数组键对数组进行分组?

如何通过键对对象数组进行分组

如何通过多个键对JSON数组数据进行分组

通过相同的键对JavaScript数组对象进行分组

如何通过匹配内部数组中的值来对数组列表中的数组进行分组?

使用嵌套的foreach对数据进行分组

将MapPartitionsRDD转换为DataFrame并通过2个键对数据进行分组

PHP-通过维护原始数组键按子数组值对数组进行排序

通过散布另一个数组对数组进行分组

通过StudentId对数组进行分组,并找到具有相同元素的子数组的总和

如何基于键对数组进行分组,以及如何使用分组数组作为值来创建动态对象?

使用嵌套对象对数组内的值进行分组和计数

如何基于Javascript / Jquery中的多个键对数组项进行分组