Javascript JS筛选器数组还是长度未知的数组?

Javascript JS筛选器数组还是长度未知的数组?,javascript,apexcharts,Javascript,Apexcharts,我有一些数据,我正试图通过按日期过滤来转换,但是数据的长度可能会有所不同,例如: longData = [ // These objects could be unlimited but the name key will always be unique {name: Opt 1, Data: // The first value will always be a date string and the second is the amount,

我有一些数据,我正试图通过按日期过滤来转换,但是数据的长度可能会有所不同,例如:

longData = [
     // These objects could be unlimited but the name key will always be unique
    {name: Opt 1,
     Data:
         // The first value will always be a date string and the second is the amount, the length of this array is always unknown
         ['2021-01-02', 30],
         ['2021-01-03, 20],
         ['2021-02-05', 15]
     },
     {name: Opt 2,
     Data:
         ['2021-01-02', 30],
         ['2021-02-08, 20],
         ['2021-04-02, 15]
     },
     {name: Opt 3,
     Data:
         ['2021-03-02', 30],
         ['2021-03-04, 20]
     }
我想做的是创建一个新对象,它的形状和原始对象相同,但只包含日期之间的数据

即,如果我的开始日期为“2021-01-01”,结束日期为“2021-01-07”

我应该得到一个像下面这样的物体

shortData = [
    {name: Opt 1,
     Data:
         ['2021-01-02', 30],
         ['2021-01-03, 20]
     },
     {name: Opt 2,
     Data:
         ['2021-01-02', 30]
     },
     {name: Opt 3,
     Data:
         []
     }
我试着按周分解,这些数字在图表中呈现,当处理大型数据集时,它基本上可以分解图表,所以我试着按周分页


任何关于如何实现它的想法都会很有帮助。

您可以创建一个函数
filterByDate
,它接受开始日期和结束日期字符串,并将它们转换为日期对象。然后,对于
longData
中的每个对象,可以将其转换为包含新
Data
属性的转换对象,该属性是
数据
数组的版本

const longData=[{name:“Opt 1”,数据:['2021-01-02',30],'2021-01-03',20],'2021-02-05',15],{name:“Opt 2”,数据:['2021-01-02',30],'2021-02-0',8,20],{name:“Opt 3”,数据:['2021-03-02',30],'2021-03-04',20];
常数isBetween=(dx,d1,d2)=>d1{
const startDate=新日期(开始);
const endDate=新日期(结束);
返回data.map(obj=>({…obj,data:obj.data.filter(
([date])=>isBetween(新日期、开始日期、结束日期)
)}));
}
常数res=过滤水化物(longData,'2021-01-01','2021-01-07');

控制台日志(res)给定以下对象数组:

const数据=[
{
名称:“选择1”,
数据:[
["2021-01-02", 30],
["2021-01-03", 20],
["2021-02-05", 15],
],
},
{
名称:“选择2”,
数据:[
["2021-01-02", 30],
["2021-02-08", 20],
["2021-04-02", 15],
],
},
{
名称:“选择3”,
数据:[
["2021-03-02", 30],
["2021-03-04", 20],
],
},
];
您只需返回相同的数组,以便它按给定日期(即
“2021-01-02”
)过滤
数据
属性(这是一个长度未知的数组),我将使用,并创建新数据,但要过滤
数据
属性,以便它与给定日期匹配(或者在您的情况下,在开始和结束日期内):

让newData=data.reduce(
(会计科目,当前)=>[
…acc,
{…curr,Data:curr.Data.filter((d)=>d[0]==“2021-01-02”),
],
[]
);
// [
//{名称:“选择1”,数据:[“2021-01-02”,30]},
//{名称:“选择2”,数据:[“2021-01-02”,30]},
//{名称:“选择3”,数据:[]},
// ];