根据两个或多个键对对象数组中的对象和动态收集的值数组中的对象进行分组



我需要根据数据集值中已知键的两个或多个过滤器对对象进行分组。

我相信过滤是最好的方法,但是我所有的尝试都失败了。

var uniqueKeys = ['course','gradDate'];
var dataSet = [
{
lastName:'Jones',
course:'Standards',
gradDate:'12/12/2022'
},
{    
lastName:'Smith',
course:'Standards',
gradDate:'12/12/2022'
},
{
lastName:'Martinez',
course:'Maths',
gradDate:'12/12/2022'
},
{
lastName:'Santiago',
course:'Photography',
gradDate:'12/11/2022'
},
{
lastName:'Alexi',
course:'Photography',
gradDate:'12/11/2022'
}
]
function returnUniqueValues(array,key){
return UniqueValue = [...new Set(array.map(item => item[key]))]
}
var uniqueCourses = returnUniqueValues(dataSet,'course') 
//result for this dataset === ["Standards","Maths","Photography"];
var uniqueGradDates = returnUniqueValues(dataSet,'gradDate') 
//Result for this dataset === ["12/12/2022","12/11/2022"];

从这里我有两个唯一值数组,我需要从源数据集(dataset)分组对象

如果我没有正确地描述它,我很抱歉,希望期望输出的示例将澄清它。

对于所有步骤,如果没有匹配双过滤器,则不返回任何内容。下面是我如何处理这个问题的示例步骤:

第一步将为所有具有course == "Standards"和一个毕业生==="2022年12月12日"。这里我将得到两个对象。然后,我将它传递给一个新数组以供稍后引用。

第二步将过滤源数据集,数据集中包含course == "Standards"and graduate === "12/11/2022"

第三步将过滤dataSet中包含course == "Maths"and graduate == "12/12/2022">

这个数据集的示例输出将是

var finalData = [
[{
lastName: 'Jones',
course: 'Standards',
gradDate: '12/12/2022'
},
{
lastName: 'Smith',
course: 'Standards',
gradDate: '12/12/2022'
},
],
[{
lastName: 'Martinez',
course: 'Maths',
gradDate: '12/12/2022'
}],
[{
lastName: 'Santiago',
course: 'Photography',
gradDate: '12/11/2022'
},
{
lastName: 'Alexi',
course: 'Photography',
gradDate: '12/11/2022'
}
]
]

最终目标是遍历每个组(在本例中是具有相同课程和研究生对的任何人)并使用他们的信息(如姓氏)填充报告。在这个例子中,course和graduate有3种独特的组合。我预计会有数千门不同的课程,最多有4个不同的日期。

您可以简单地使用'group-by'与指定属性的复合键。

这里调用map()join()在你的uniqueKeys数组为每个迭代对象生成复合键,然后检索或初始化属性使用逻辑空赋值(??=)之前,将对象推到它。结果是分组对象的Object.values()

const dataSet = [{ lastName: 'Jones', course: 'Standards', gradDate: '12/12/2022' }, { lastName: 'Smith', course: 'Standards', gradDate: '12/12/2022' }, { lastName: 'Martinez', course: 'Maths', gradDate: '12/12/2022' }, { lastName: 'Santiago', course: 'Photography', gradDate: '12/11/2022' }, { lastName: 'Alexi', course: 'Photography', gradDate: '12/11/2022' }];
const uniqueKeys = ['course', 'gradDate'];
const grouped = {};
for (const o of dataSet) {
const key = uniqueKeys.map(k => o[k]).join('_');
(grouped[key] ??= []).push(o);
}
const result = Object.values(grouped)
console.log(result);

相关内容

  • 没有找到相关文章