JavaScript数组.filter()和迭代器

JavaScript数组.filter()和迭代器,javascript,arrays,Javascript,Arrays,获得了一个对象数组,需要按2个标准进行筛选。其中一个标准是索引计数 let data = [{"hour": 1, "dayIndex": 0, "value": "something"}, {"hour": 1, "dayIndex": 1, "value": "something"}, {"hour": 1, "dayIndex": 3, "value": "something"}, {"hour": 2, "dayIndex": 0, "value": "something"}, {"h

获得了一个对象数组,需要按2个标准进行筛选。其中一个标准是索引计数

let data = 
[{"hour": 1, "dayIndex": 0, "value": "something"},
{"hour": 1, "dayIndex": 1, "value": "something"},
{"hour": 1, "dayIndex": 3, "value": "something"},
{"hour": 2, "dayIndex": 0, "value": "something"},
{"hour": 2, "dayIndex": 1, "value": "something"},
// and so on 
]
我需要一个按“小时”和升序“dayIndex”过滤的对象数组,对于缺少dayIndex的对象,创建一个空对象是很重要的。对于小时=1,我需要这个:

 let hourOneArray = 
 [
  {"hour" : 1, "dayIndex": 0, "value": "something"},
  {"hour" : 1, "dayIndex": 1, "value": "something"},
  {}, //empty because dayIndex 2 is missing
  {"hour" : 1, "dayIndex": 3, "value": "something"},
  {}, //empty because dayIndex 4 is missing
 ]
我的做法是:

   for(let i = 0; i < 4; ++i){
       hourOneArray = data.filter((arg) => {
           return ((arg.hour === 1) && (arg.dayIndex === i));
       })
   } 
for(设i=0;i<4;++i){
Houronarray=data.filter((arg)=>{
返回((arg.hour==1)和&(arg.dayIndex==i));
})
} 
提前感谢

let数据=
[{“hour”:1,“dayIndex”:0,“value”:“something”},
{“hour”:1,“dayIndex”:1,“value”:“something”},
{“hour”:1,“dayIndex”:3,“value”:“something”},
{“hour”:2,“dayIndex”:0,“value”:“something”},
{“hour”:2,“dayIndex”:1,“value”:“something”}]
data=data.sort((a,b)=>a.dayIndex-b.dayIndex);
data=data.map(val=>val.hour==1?val:{});
控制台日志(数据)您可以尝试以下操作

let data=[{“hour”:1,“dayIndex”:0,“value”:“something”},{“hour”:1,“dayIndex”:1,“value”:“something”},{“hour”:2,“dayIndex”:0,“value”:“something”},{“hour”:1,“dayIndex”:3,“value”:“something”};
//按小时和日索引对数组排序
data.sort((a,b)=>a.hour-b.hour | | a.dayIndex-b.dayIndex);
函数getHourData(小时){
//获取小时数据
var hourData=data.filter((a)=>a.hour==hour);
//现在,迭代到过滤数组的最大dayIndex
for(设i=0;iconsole.log(getHourData(1))
您可以
减少为一个对象,该对象由
dayIndex
索引,然后为每个缺少的日期添加对象,无需排序(
O(n)
):

const输入=
[{“hour”:1,“dayIndex”:0,“value”:“something”},
{“hour”:1,“dayIndex”:1,“value”:“something”},
{“hour”:1,“dayIndex”:3,“value”:“something”},
{“hour”:2,“dayIndex”:0,“value”:“something”},
{“hour”:2,“dayIndex”:1,“value”:“something”},
];
常量[groupedByDay,haveDays]=输入
.减少(([groupedByDay,haveDays],项)=>{
常数{hour,dayIndex}=项;
如果(小时===1&&!groupedByDay[dayIndex]){
groupedByDay[dayIndex]=项目;
haveDays.push(dayIndex);
}
返回[groupedByDay,haveDays];
}, [{}, []]);
常量长度=数学最大值(…haveDays)+1;
const houronarray=Array.from({length},({,i)=>(
groupedByDay[i]?groupedByDay[i]:{}
));

控制台日志(Houronarray)这里有一个快速、干净的解决方案,可以按小时过滤所有这些数据,填补空白天数。利用map和reduce:D

let数据=
[{“hour”:1,“dayIndex”:0,“value”:“something”},
{“hour”:1,“dayIndex”:1,“value”:“something”},
{“hour”:1,“dayIndex”:3,“value”:“something”},
{“hour”:2,“dayIndex”:0,“value”:“something”},
{“hour”:2,“dayIndex”:1,“value”:“something”},
//等等
]
设defaultArr=[];
data.forEach(val=>defaultArr.push({}));
让输出=数据。减少((散列,val)=>{
设hour=val.hour;
设dayIndex=val.dayIndex;
如果(!hash[hour])hash[hour]=defaultArr.map(val=>val);
hash[hour][dayIndex]=val;
返回散列;
}, {})

控制台日志(输出)您想要的确切输出是什么?