使用lodash映射/变换对象的javascript数组

疯狂的电脑

我有一个看起来像这样的对象数组:

[
     {
      "group": {
        "name": "Software Developers",
        "desc":"some desc"
      },
      "name": "devs 1", 
        "file": "f1.csv"
    },
    {
      "group": {
        "name": "Software Developers",
        "desc":"some desc"
      },
      "name": "devs 2", 
      "file": "f2.csv"
    },
    {
      "group": {
        "name": "Ceos",
        "desc":"some desc"
      },
      "name": "ceos 1", 
      "file": "f3.csv"
    },
    {
      "group": {
        "name": "Ceos",
        "desc":"some desc"
      },
      "name": "ceos 2", 
      "file": "f4.csv"
    }
]

使用lodash如何将这个json数组转换为如下形式:

[
    {
      "group": {
        "name": "Software Developers",
    "desc":"some desc"
      },
    lists: [{ "name": "devs 1", "file": "f1.csv" }, { "name": "devs 2", "file": "f2.csv" }]
    },
    {
      "group": {
        "name": "Ceos",
    "desc":"some desc"
      },
    lists: [{ "name": "ceos 1", "file": "f3.csv" }, { "name": "ceos 2", "file": "f4.csv" }]
    }
]

我尝试了各种解决方案,但没有任何运气。

或Drori

_.groupBy()group.name,然后_.map()以所希望的结构:

const data = [{"group":{"name":"Software Developers","desc":"some desc"},"name":"devs 1","file":"f1.csv"},{"group":{"name":"Software Developers","desc":"some desc"},"name":"devs 2","file":"f2.csv"},{"group":{"name":"Ceos","desc":"some desc"},"name":"ceos 1","file":"f3.csv"},{"group":{"name":"Ceos","desc":"some desc"},"name":"ceos 2","file":"f4.csv"}];

const result = _.flow([
  (arr) => _.groupBy(arr, 'group.name'),
  (groups) => _.map(groups, (g) => ({
    ..._.head(g).group,
    lists: _.map(g, o => _.pick(o, ['name', 'file']))
  }))
])(data);

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章