normalizr - 如何用于基于属性的分组

时间:2017-11-13 19:17:39

标签: javascript redux react-redux jsonschema normalizr

我需要重新构建服务器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"
        }
    ]
}

我想根据'created'对此进行分组,如下所示。

{
    "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是最好的选择吗?

1 个答案:

答案 0 :(得分:2)

您可以使用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'));