v2.5.2
Giriş yap

json array ile zamana ve gruba göre filtreleme

istek61
332 defa görüntülendi ve 1 kişi tarafından değerlendirildi
//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 }
Cevap yaz
Cevaplar (5)
istek61
637 gün önce

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);
istek61
638 gün önce

@tayfunerbilen yok tayfun bey aşağıda daha detaylı anlattım. umarım anlatabilmişimdir. 2. filtre deki dizilişe ihtiyacım var

//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 }
tayfunerbilen
638 gün önce

tam olarak anlayamadim ne yaptigini, ama 2 sort deneyebilirsin

console.log(
    people.sort((a, b) => a.data.entertime.localeCompare(b.data.entertime))
          .sort((a, b) => a.data.groupname.localeCompare(b.data.groupname))
)
istek61
639 gün önce

acaba anlatamadım mı? yoksa yazının uzunluğumu sorun oldu.

aslında şu kombinasyon için izlemem gereken birkaç komut adı belirtseniz ben function u uyarlarım.

var people = [
{

data: {
    id: "1",
    family: "1",
    grouptotal: "2",
    groupname: "A1",
    newtime: "2023-02-24 12:24:00",
    },
data: {
    id: "2",
    family: "1",
    grouptotal: "2",
    groupname: "A1",
    newtime: "2023-02-24 12:24:00",
    }

}
];

burada diyelim önce saati ben kendi içinde sıraladım.

people[1] in yerini people[3] ün altına taşıyacagım.

nasıl bir array komutu kullanmalıyım ? yani data dizinini komple yer değiştirmeliyim.

istek61
640 gün önce

off yaa uyuyup uyanınca kendime geldim. yanlış komuta odaklanmışım
filter komutu sıralama için degil sort u kullanmalıymışım.

1 . sıralamayı yaptım ama ikinci sıralamayı yapamıyorum.

sıralamada grupname mevcutsa
zamanı en küçügü sıralaya koyup diğerlerini zaman sıralamasına göre kendi içinde altına ekleyip döngüye devama etmek istiyorum.

id: 1 time: 12:00
id: 2 time: 12:05
id: 3 groupname: A1 time: 12:25 **** bu kısım gibi
id: 6 groupname: A1 time: 12:29
id: 8 groupname: A1 time: 12:33
id: 4 time: 12:27
id: 5 time: 12:29
id: 7 time: 12:29
id: 9 time: 12:35
id: 10 groupname: B3 time: 12:33
id: 11 groupname: B3 time: 12:33

1 . function çalışıyor.

var newArray = people.sort(function (a, b) {
    return a.data.entertime.localeCompare(b.data.entertime);
});


console.log(newArray);
});