【问题标题】:normalizr -How to use for grouping based on a propertynormalizr - 如何用于基于属性的分组
【发布时间】:2018-04-26 13:57:37
【问题描述】:

我需要重组来自服务器 API 的数据以在我的客户端应用程序中使用,我开始了解 normalizr。如果可能的话,我正在尝试使用这个库。

数据结构如下。

{
    "history": [{
            "_id": "5a09d7a48134664b58eb9ff7",
            "created": "2017-11-13"
        }, {
            "_id": "5a09d79c8134664b58eb9ff6",
            "created": "2017-11-13"
        }, {
            "_id": "5a09d7968134664b58eb9ff5",
            "created": "2017-11-13"
        }, {
            "_id": "5a0349da81069a3754ac1a91",
            "created": "2017-11-08"
        }
    ]
}

我想根据“已创建”对它进行分组,如下所示。

{
    "history": {
        "2017-11-13": [{
                "_id": "5a09d7a48134664b58eb9ff7",
                "created": "2017-11-13"
            }, {
                "_id": "5a09d79c8134664b58eb9ff6",
                "created": "2017-11-13"
            }, {
                "_id": "5a09d7968134664b58eb9ff5",
                "created": "2017-11-13"
            }

        ],
        "2017-11-08": [{
                "_id": "5a0349da81069a3754ac1a91",
                "created": "2017-11-08"
            }
        ]
    }
}

如何用 normalizr 做到这一点?我知道我需要的只是数据的重组, normalizr 是最好的选择吗?

【问题讨论】:

    标签: javascript redux react-redux jsonschema normalizr


    【解决方案1】:

    您可以使用 ES6 版本通过以下函数来完成此操作

    function grouping (arr, key) {
     return (arr || []).reduce((acc, x = {}) => ({
      ...acc,
       [x[key]]: [...acc[x[key]] || [], x]
     }), {})
    }
    

    它有两个参数,数组和分组的键

    function grouping (arr, key) {
      return (arr || []).reduce((acc, x = {}) => ({
        ...acc,
        [x[key]]: [...acc[x[key]] || [], x]
      }), {})
    }
    
    let history = [{
                "_id": "5a09d7a48134664b58eb9ff7",
                "created": "2017-11-13"
            }, {
                "_id": "5a09d79c8134664b58eb9ff6",
                "created": "2017-11-13"
            }, {
                "_id": "5a09d7968134664b58eb9ff5",
                "created": "2017-11-13"
            }, {
                "_id": "5a0349da81069a3754ac1a91",
                "created": "2017-11-08"
            }
        ];
    console.log(grouping(history,'created'));

    【讨论】:

    • 这不是基于创建的组。我试图获得一个元素数组,其中日期为键,对象的日期与值相同。
    • @Edayan 您是否运行了代码 sn-p 来验证?在我看来,这与您所写的预期相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    相关资源
    最近更新 更多