JavaScript数组.filter()和迭代器
获得了一个对象数组,需要按2个标准进行筛选。其中一个标准是索引计数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
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;i console.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;
返回散列;
}, {})
控制台日志(输出)代码>您想要的确切输出是什么?