#javascript
#javascript
Вопрос:
У меня есть массив объектов, в котором я хочу выяснить, какие последовательные дни являются наиболее распространенными среди всех из них, а затем выбрать первый день из этой пары последовательных дней.
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"]
},
];
так, например, для Лос-Анджелеса я бы хотел вернуться:
{
city: "Los Angeles",
day: "2020-01-02",
people: ["mike", "ricardo"],
}
«Мэгги» не будет, поскольку ее доступные последовательные дни отображаются меньше, чем у Майка и Джеймса.
Для Майка и Джеймса, "2020-01-02"
и "2020-01-03"
больше всего подходит для Лос-Анджелеса.
Для Чикаго я бы хотел вернуть только пустую строку, поскольку у меня нет последовательных дней.
До сих пор я перебирал данные и перенес город в объект. Если город уже есть в объекте, я помещаю каждый day
в существующий массив. Если city
нет в хеш-объекте, то я просто устанавливаю его и устанавливаю равным days
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();
}
мой результат — объект с городом в качестве ключа, а значение — дни (с удалением дубликатов с помощью Set) :
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"]
}
С этого момента я не уверен, что делать. Я полагаю, что это возможно сделать, но я не знаю, какой следующий шаг здесь.
Ответ №1:
Вы можете использовать alasql https://github.com/agershun/alasql/wiki/Examples
с помощью alasql вы можете создавать: ОТДЕЛЬНЫЕ или ГРУППОВЫЕ и т. Д.
пример:
// 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);