Javascript 按键值筛选和分组
下面是我的样本数据Javascript 按键值筛选和分组,javascript,arrays,typescript,object,multidimensional-array,Javascript,Arrays,Typescript,Object,Multidimensional Array,下面是我的样本数据 var data = [ { "Employee Name": "Mr. X", "Portfolio Lead": "A" }, { "Employee Name": "Mr. Y", "Portfolio Lead": "B" }, { "Employee Name": "Mr. Z", "Portfolio Lead": "C" }, { "Employee Name": "Mr. Q"
var data = [
{
"Employee Name": "Mr. X",
"Portfolio Lead": "A"
},
{
"Employee Name": "Mr. Y",
"Portfolio Lead": "B"
},
{
"Employee Name": "Mr. Z",
"Portfolio Lead": "C"
},
{
"Employee Name": "Mr. Q",
"Portfolio Lead": "A"
},
{
"Employee Name": "Mr. P",
"Portfolio Lead": "A"
}
];
现在,我需要将所有数组项按其“Portfolio Lead”
分组,并将它们推送到新数组中
下面是我的代码
const groupBy = (array, key) => {
return array.reduce((result, currentValue) => {
(result[currentValue[key]] = result[currentValue[key]] || []).push(
currentValue
);
return result;
}, {});
};
上面的代码是有效的,它是按键分组的,但我希望新数组是在这种结构中
我现在的结构是这样的,
{
"A": [
{
"Employee Name": "Mr. X",
"Portfolio Lead": "A"
},
...
],
"B": [
{
"Employee Name": "Mr. Y",
"Portfolio Lead": "B"
}
],
"C": [
{
"Employee Name": "Mr. Z",
"Portfolio Lead": "C"
}
]
}
但需要这样吗
{
"Portfolio Lead": "A",
Count: 3,
oriData: [....]
}
目前我被困在这个请帮助
My stackBlitz我们可以调用结果值,然后调用它以我们想要的方式格式化它:
constgroupby=(数组,键)=>{
返回Object.entries(array.reduce)((result,currentValue)=>{
(结果[currentValue[key]]=结果[currentValue[key]]| |[])。按(
当前值
);
返回结果;
}.map(v=>({[key]:v[0],count:v[1]。长度,oriData:v[1]});
};
什么是oriData
?我得到的错误属性“length”在类型“unknown”上不存在。ts(2339)
我得到的错误属性“length”在类型“unknown”上不存在。ts(2339)@Arun您使用的是相同的数据吗?你用的是什么?
const groupBy = (array, key) => {
return Object.entries(array.reduce((result, currentValue) => ({
...result,
[currentValue[key]]: [...(result[currentValue[key]] || []), currentValue]
}), {})).map(ob => ({"Portfolio Lead": ob[0], oriData: ob[1], Count: ob[1].length}));
};