我有一个对象数组,我想找出它们之间最常见的连续日期,然后选择该连续日期对中的第一天。
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"],
}"Maggie“不会出现,因为她连续可用的天数比Mike和James少。
对于迈克和詹姆斯来说,"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"]
}从这一点来看,我不确定该怎么做。我想这是可以实现的,但我不知道下一步该怎么做。
发布于 2020-09-23 15:37:32
您可以使用alasql https://github.com/agershun/alasql/wiki/Examples
使用alasql,你可以做: DISTINCT或GROUP等。
示例:
// 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);https://stackoverflow.com/questions/64021155
复制相似问题