我需要重新构建服务器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是最好的选择吗?
答案 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'));