Nesne günlerinde ortak yön bulma

Sep 22 2020

Ardışık hangi günlerin tümü arasında en yaygın olduğunu bulmak ve ardından bu ardışık gün çiftinin ilk gününü seçmek istediğim bir dizi nesnem var.

let data = [
   {
     name: "mike",
     city: "Los Angeles",
     days: ["2020-01-02", "2020-01-03","2020-01-18", "2020-01-19"]
   },

   {
     name: "Kenny",
     city: "Chicago",
     days: ["2020-04-02", "2020-04-12","2020-04-19"]

   },
 
   {
     name: "James",
     city: "Los Angeles",
     days: ["2020-05-02", "2020-05-12","2020-05-19"]
   },
    {
     name: "Maggie",
     city: "Los Angeles",
     days: ["2020-11-12", "2020-11-13","2020-05-19"]
   },
   {
     name: "Ricardo",
     city: "Los Angeles",
     days: ["2020-01-02", "2020-01-03","2020-05-19"]
   },
   {
     name: "Reeny",
     city: "Chicago",
     days: ["2020-01-02", "2020-01-04","2020-05-09"]
   },

];

Örneğin, Los Angeles için geri dönmek istiyorum:

{
   city: "Los Angeles", 
   day: "2020-01-02",
   people: ["mike", "ricardo"],
}

Art arda uygun günleri Mike ve James'ten daha az göründüğü için "Maggie" burada olmayacak.

Mike ve James için "2020-01-02"ve "2020-01-03"en çok Los Angeles için görünüyor.
Chicago için, birbirini izleyen günlerim olmadığı için yalnızca boş bir dize döndürmek isterim.

Şimdiye kadar verileri yineledim ve şehri bir nesneye ittim. Şehir zaten nesnenin içindeyse, her daybirini mevcut diziye gönderiyorum. Eğer cityhash nesnesinde değilse, o zaman onu ayarlıyorum ve eşit olmasını sağlıyorumdays

let obj = {};
data.forEach(x => {
   if (map[x.city]) {
       x.days.forEach(y => {
          map[x.city].push(y);
       })
   } else {
      map[x.city] = x.days;
   }
});

for (x in obj) {
    let arr = [...new Set(obj[x])]
    obj[x] = arr.sort();
}

sonucum, şehir anahtarının olduğu bir nesnedir ve değer günlerdir (kopyalar Set aracılığıyla kaldırılmıştır):

obj = {
    "Los Angeles": ["2020-01-02", "2020-01-03","2020-01-18", "2020-01-19", "2020-05-02", "2020-05-12","2020-05-19", "2020-11-12", "2020-11-13"],
    "Chicago": ["2020-01-02", "2020-01-04","2020-04-02", "2020-04-12","2020-04-19", "2020-05-09"]
    }

Bu noktadan sonra ne yapacağımı bilmiyorum. Bunu başarmanın mümkün olduğunu düşünüyorum ama burada bir sonraki adımı bilmiyorum.

Yanıtlar

merşahin Sep 23 2020 at 07:37

Alasql kullanabilirsiniz https://github.com/agershun/alasql/wiki/Examples

alasql ile şunları yapabilirsiniz: DISTINCT veya GROUP vb.

misal:

// Fill table with data
var person = [ 
    { name: 'bill' , sex:'M', income:50000 },
    { name: 'sara' , sex:'F', income:100000 },
    { name: 'larry' , sex:'M', income:90000 },
    { name: 'olga' , sex:'F', income:85000 },
];

// Do the query
var res = alasql("SELECT * FROM ? person WHERE sex='F' AND income > 60000", [person]);

document.getElementById("result").innerHTML = JSON.stringify(res);