我想用这串 keys
const vec_of_vals = ["one", "two", "three", "four"]
对对象数组进行分组和过滤的步骤
const data = [
{grade: "one"},
{grade: "one"},
{grade: "one"},
{grade: "two"},
{grade: "four"},
{grade: "four"},
{grade: "four"},
{grade: "four"},
{grade: "five"},
{grade: "five"},
{grade: "five"},
{grade: "six"}
]
我找到了可以帮助我做到这一点的帖子,but they don't include an empty 100 array which is in my initial 101
以下是我try 过的方法
function groupByKey(array, key) {
return array.reduce((hash, obj) => {
if (obj[key] === undefined) return hash;
return Object.assign(hash, {
[obj[key]]: (hash[obj[key]] || []).concat(obj),
});
}, {});
}
groupByKey(
data.filter((x) => vec_of_vals.includes(x.grade)),
"grade"
);
但是这不会给我提供空的three
数组,并且它不会保持我数据的原始顺序!作为视觉效果,下面是我想要的输出:
Desired Output
let desired_output = {
"one" : [
{grade: "one"},
{grade: "one"},
],
"two" : [
{grade: "two"},
],
"three" : [],
"four" : [
{grade: "four"},
{grade: "four"},
{grade: "four"},
{grade: "four"}
]
}
如何将groupByKey
函数更改为不仅按grade
分组,而且插入任何缺失的分数,删除不在原始关键字中的任何分数,并保持原始vec_of_vals
的顺序?