Javascript 使用可随时间变化的二维过滤器阵列过滤数据阵列
我正在尝试用二维对象过滤器数组过滤对象的数据数组 我的数据数组如下所示:Javascript 使用可随时间变化的二维过滤器阵列过滤数据阵列,javascript,arrays,typescript,multidimensional-array,Javascript,Arrays,Typescript,Multidimensional Array,我正在尝试用二维对象过滤器数组过滤对象的数据数组 我的数据数组如下所示: dataArray = [{ Filter_GroupSize: "1" Filter_Time: "5-30" title: "Tools Test 1" }, { Filter_GroupSize: "5-10" Filter_Time: "60-120" title: "Tools test 2" }, { Filter_GroupSize: "5-10"
dataArray = [{
Filter_GroupSize: "1"
Filter_Time: "5-30"
title: "Tools Test 1"
}, {
Filter_GroupSize: "5-10"
Filter_Time: "60-120"
title: "Tools test 2"
}, {
Filter_GroupSize: "5-10"
Filter_Time: "120-240"
title: "Tools 3"
}, {
Filter_GroupSize: "10-20"
Filter_Time: "240-360"
title: "Tools Test 4"
}]
问题是二维滤波器阵列可以随时间而改变。在我下面的例子中,它的长度是2。但随着时间的推移,它会变得越来越大或越来越小。如果2D过滤器阵列更改,则dataArray也会更改
下面是我的二维过滤对象数组现在的样子
FiltersToApply = [
[{
choice: "5-10"
internalColName: "Filter_GroupSize"
}, {
choice: "10-20"
internalColName: "Filter_GroupSize"
}],
[{
choice: "60-120"
internalColName: "Filter_Time"
}, {
choice: "120-240"
internalColName: "Filter_Time"
}]
]
我希望通过数据数组进行过滤,并且只返回具有2D过滤器数组中的“filter\u GroupSize”和“filter\u Time”值的元素。在本例中,我希望在新数组中返回“Tools test 2”和“Tools 3”元素。我需要一个筛选函数,该函数检查“FiltersToApply[0]”,如果找到匹配项,则检查“FiltersToApply[1]”是否与dataArray中的同一元素匹配
我已经完成了以下代码:
for (let i = 0; i < FiltersToApply.length; i++) {
console.log(FiltersToApply[i]);
FiltersToApply[i].forEach((filter) => {
var filteredArray: Tool[] = dataArray.filter((item) => {
if (item[filter.internalColName] == filter.choice && ((i+1) <= FiltersToApply.length)) {
this.nextArray(FiltersToApply[i+1], item);
}
});
});
}
for(设i=0;i{
var filteredArray:Tool[]=dataArray.filter((项)=>{
如果(item[filter.internalColName]==filter.choice&&((i+1)我使用下面的代码片段,基本上将过滤器数组展开,并将它们与属性名称分组,然后根据该名称进行过滤
var数据数组=[{
筛选器_GroupSize:“1”,
过滤时间:“5-30”,
标题:“工具测试1”
}, {
过滤组大小:“5-10”,
过滤时间:“60-120”,
标题:“工具测试2”
}, {
过滤组大小:“5-10”,
过滤时间:“120-240”,
标题:“工具3”
}, {
过滤组大小:“10-20”,
过滤时间:“240-360”,
标题:“工具测试4”
}];
var过滤器应用=[
[{
选项:“5-10”,
internalColName:“过滤器\组大小”
}, {
选择:“10-20”,
internalColName:“过滤器\组大小”
}],
[{
选择:“60-120”,
internalColName:“过滤时间”
}, {
选择:“120-240”,
internalColName:“过滤时间”
}]
];
//展开过滤器数组以获得线性格式,然后按属性分组以组合选项
var filterArr=FiltersToApply.flat().reduce(函数(a,cv){
(a[cv.internalColName]=a[cv.internalColName]| |[]).push(cv.choice);
返回a;
}, []);
var result=dataArray.filter(函数(v){
返回filterArr.Filter\u GroupSize.indexOf(v.Filter\u GroupSize)>-1&&filterArr.Filter\u Time.indexOf(v.Filter\u Time)>-1
});
console.log(result.map(函数(v){return v.title;}))
请添加一个结果。请查看此处: