json array ile zamana ve gruba göre filtreleme
//JSON ARRAY'IMIZ
1: { grup: A, time: 19:50 }
2: { grup: B, time: 19:30 }
3: { grup: C, time: 19:32 }
4: { grup: B, time: 19:55 }
5: { grup: D, time: 19:49 }
6: { grup: E, time: 19:15 }
1 . Filtre zamana göre olursa İD ler şu şekilde diziliyor
// Bu zamana göre filtrelemede sorun yok.
6: { grup: E, time: 19:15 }
2: { grup: B, time: 19:30 }
3: { grup: C, time: 19:32 }
5: { grup: D, time: 19:49 }
1: { grup: A, time: 19:50 }
4: { grup: B, time: 19:55 }
2 . Filtrede ise istediğim şu; zamana göre sırala ama şu grup kuralına da uy!
Aynı gruptan diyelim ki (B) , 2 tane var. Ama biri saat olarak en sona denk geliyor. İşte o en sona kalmayacak. 1. B nin peşine yazılacak. Yani şöyle gözükecek. ve devamında diğer gruplarda da böyle düzen varsa onlara da uygulayacak
6: { grup: E, time: 19:15 }
2: { grup: B, time: 19:30 }
4: { grup: B, time: 19:55 } // bu normal "sort" işlemlerinde sona denk geliyor. bana burada B nin altında lazım
3: { grup: C, time: 19:32 }
5: { grup: D, time: 19:49 }
1: { grup: A, time: 19:50 }
Sonunda istediğim gruplamayı bitirdim. birgün birine lazım olursa kodlar aşağıdadır.
var people = [
{
data: {
family: "3",
entertime: "2023-02-24 12:59:00",
}
},
{
data: {
family: "5",
entertime: "2023-02-24 12:11:01",
}
},
{
data: {
family: "6",
entertime: "2023-02-24 12:30:02",
}
},
{
data: {
family: "5",
entertime: "2023-02-24 12:41:00",
}
},
{
data: {
family: "17",
entertime: "2023-02-24 12:16:01",
}
},
{
data: {
family: "17",
entertime: "2023-02-24 12:41:01",
}
},
{
data: {
family: "8",
entertime: "2023-02-24 12:31:00",
}
},
{
data: {
family: "17",
entertime: "2023-02-24 12:17:03",
}
},
{
data: {
family: "15",
entertime: "2023-02-24 12:00:03",
}
},
];
var peopleTimeSort = people.sort((a, b) => a.data.entertime.localeCompare(b.data.entertime));
var peopleTemp = structuredClone(peopleTimeSort);
var peopleDel = structuredClone(peopleTemp);
var peopleGroup = [];
var peopleTempFamily = [];
[...peopleTemp].forEach( (n,i) => {
if (i === 0) {
peopleGroup.push(n);
delete peopleDel[i];
peopleTempFamily.push(n.data.family);
peopleDel.forEach( (nn,ii) => {
if(n.data.family === nn.data.family) {
peopleGroup.push(nn);
delete peopleDel[ii];
}
})
} else {
if (peopleTempFamily.indexOf(n.data.family) < 0) {
peopleGroup.push(n);
delete peopleDel[i];
peopleTempFamily.push(n.data.family);
peopleDel.forEach( (nn,ii) => {
if(n.data.family === nn.data.family) {
peopleGroup.push(nn);
delete peopleDel[ii];
}
})
}
}
});
console.log(peopleGroup);