使用 reduce 在 2 个属性上按数组分组
Group-by array on 2 properties with reduce
我想按 2 个属性对一组对象进行分组。我怎样才能做到这一点?
我得到了这个数组:
[
{
"nome": "Beatrice Mattos",
"apelido": "Beatrice",
"dt_extrato": "2020-05-26T00:00:00",
"dt_inicio": "2020-05-26T15:00:00",
"Servico": "Corte Masculino"
},
{
"nome": "Davi",
"apelido": "Davi",
"dt_extrato": "2020-05-26T00:00:00",
"dt_inicio": "2020-05-26T14:00:00",
"Servico": "Corte Masculino"
},
{
"nome": "Kai",
"apelido": "Martins",
"dt_extrato": "2020-05-26T00:00:00",
"dt_inicio": "2020-05-26T13:30:00",
"Servico": "Barba Completa"
},
{
"nome": "Beatrice Mattos",
"apelido": "Beatrice",
"dt_extrato": "2020-05-26T00:00:00",
"dt_inicio": "2020-05-26T09:30:00",
"Servico": "Corte Masculino"
},
{
"nome": "Beatrice Mattos",
"apelido": "Beatrice",
"dt_extrato": "2020-05-26T00:00:00",
"dt_inicio": "2020-05-26T09:00:00",
"Servico": "Alongamento de Cabelo"
},
{
"nome": "Beatrice Mattos",
"apelido": "Beatrice",
"dt_extrato": "2020-05-26T00:00:00",
"dt_inicio": "2020-05-26T08:00:00",
"Servico": "Corte Masculino"
},
{
"nome": "Estevan Alves",
"apelido": "Estevan",
"dt_extrato": "2020-05-25T00:00:00",
"dt_inicio": "2020-05-25T08:40:00",
"Servico": "Corte Masculino"
},
{
"nome": "Kai",
"apelido": "Martins",
"dt_extrato": "2020-05-25T00:00:00",
"dt_inicio": "2020-05-25T08:30:00",
"Servico": "Corte Masculino"
},
{
"nome": "Estevan Alves",
"apelido": "Estevan",
"dt_extrato": "2020-05-25T00:00:00",
"dt_inicio": "2020-05-25T08:00:00",
"Servico": "Corte Masculino"
}
]
我想把它转换成这个对象:
{
"2020-05-26T00:00:00": [{
"Beatrice Mattos": [
{
"nome": "Beatrice Mattos",
"apelido": "Beatrice",
"dt_extrato": "2020-05-26T00:00:00",
"dt_inicio": "2020-05-26T15:00:00",
"Servico": "Corte Masculino"
},
{
"nome": "Beatrice Mattos",
"apelido": "Beatrice",
"dt_extrato": "2020-05-26T00:00:00",
"dt_inicio": "2020-05-26T09:30:00",
"Servico": "Corte Masculino"
},
{
"nome": "Beatrice Mattos",
"apelido": "Beatrice",
"dt_extrato": "2020-05-26T00:00:00",
"dt_inicio": "2020-05-26T09:00:00",
"Servico": "Alongamento de Cabelo"
},
{
"nome": "Beatrice Mattos",
"apelido": "Beatrice",
"dt_extrato": "2020-05-26T00:00:00",
"dt_inicio": "2020-05-26T08:00:00",
"Servico": "Corte Masculino"
}
],
"Davi": [
{
"nome": "Davi",
"apelido": "Davi",
"dt_extrato": "2020-05-26T00:00:00",
"dt_inicio": "2020-05-26T14:00:00",
"Servico": "Corte Masculino"
}
],
"Kai": [
{
"nome": "Kai",
"apelido": "Martins",
"dt_extrato": "2020-05-26T00:00:00",
"dt_inicio": "2020-05-26T13:30:00",
"Servico": "Barba Completa"
}
]
}],
"2020-05-25T00:00:00": [{
"Kai": [
{
"nome": "Kai",
"apelido": "Martins",
"dt_extrato": "2020-05-26T00:00:00",
"dt_inicio": "2020-05-26T13:30:00",
"Servico": "Barba Completa"
},
{
"nome": "Kai",
"apelido": "Martins",
"dt_extrato": "2020-05-25T00:00:00",
"dt_inicio": "2020-05-25T08:30:00",
"Servico": "Corte Masculino"
}
],
"Estevan Alves": [
{
"nome": "Estevan Alves",
"apelido": "Estevan",
"dt_extrato": "2020-05-25T00:00:00",
"dt_inicio": "2020-05-25T08:40:00",
"Servico": "Corte Masculino"
},
{
"nome": "Estevan Alves",
"apelido": "Estevan",
"dt_extrato": "2020-05-25T00:00:00",
"dt_inicio": "2020-05-25T08:00:00",
"Servico": "Corte Masculino"
}
]
}]
}
我的目标是按日期和名称对服务进行分组。我只能按一个或另一个分组,不能同时分组。
要按字段 'name' 分组,我使用以下代码:
this.name_group = this.array.reduce((data, object) => {
data[object.nome] = [...data[object.nome] || [], object];
return data;
}, {});
要按字段 'dt_extrato' 分组,我使用以下代码:
this.date_group = this.array.reduce((data, object) => {
data[object.dt_extrato] = [...data[object.dt_extrato] || [], object];
return data;
}, {});
但我无法将两者分组,嵌套。这可能只使用 reduce 吗?
谢谢
如果您想获得中间没有数组的嵌套对象,您可以使用嵌套键数组来采用这种方法。
var data = [{ nome: "Beatrice Mattos", apelido: "Beatrice", dt_extrato: "2020-05-26T00:00:00", dt_inicio: "2020-05-26T15:00:00", Servico: "Corte Masculino" }, { nome: "Davi", apelido: "Davi", dt_extrato: "2020-05-26T00:00:00", dt_inicio: "2020-05-26T14:00:00", Servico: "Corte Masculino" }, { nome: "Kai", apelido: "Martins", dt_extrato: "2020-05-26T00:00:00", dt_inicio: "2020-05-26T13:30:00", Servico: "Barba Completa" }, { nome: "Beatrice Mattos", apelido: "Beatrice", dt_extrato: "2020-05-26T00:00:00", dt_inicio: "2020-05-26T09:30:00", Servico: "Corte Masculino" }, { nome: "Beatrice Mattos", apelido: "Beatrice", dt_extrato: "2020-05-26T00:00:00", dt_inicio: "2020-05-26T09:00:00", Servico: "Alongamento de Cabelo" }, { nome: "Beatrice Mattos", apelido: "Beatrice", dt_extrato: "2020-05-26T00:00:00", dt_inicio: "2020-05-26T08:00:00", Servico: "Corte Masculino" }, { nome: "Estevan Alves", apelido: "Estevan", dt_extrato: "2020-05-25T00:00:00", dt_inicio: "2020-05-25T08:40:00", Servico: "Corte Masculino" }, { nome: "Kai", apelido: "Martins", dt_extrato: "2020-05-25T00:00:00", dt_inicio: "2020-05-25T08:30:00", Servico: "Corte Masculino" }, { nome: "Estevan Alves", apelido: "Estevan", dt_extrato: "2020-05-25T00:00:00", dt_inicio: "2020-05-25T08:00:00", Servico: "Corte Masculino" }],
keys = ['dt_extrato', 'nome'],
result = data.reduce((r, object) => {
keys
.reduce((group, key, index, { length }) =>
group[object[key]] = group[object[key]] || (index + 1 === length
? []
: {}
), r)
.push(object);
return r;
}, {});
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
我想按 2 个属性对一组对象进行分组。我怎样才能做到这一点?
我得到了这个数组:
[
{
"nome": "Beatrice Mattos",
"apelido": "Beatrice",
"dt_extrato": "2020-05-26T00:00:00",
"dt_inicio": "2020-05-26T15:00:00",
"Servico": "Corte Masculino"
},
{
"nome": "Davi",
"apelido": "Davi",
"dt_extrato": "2020-05-26T00:00:00",
"dt_inicio": "2020-05-26T14:00:00",
"Servico": "Corte Masculino"
},
{
"nome": "Kai",
"apelido": "Martins",
"dt_extrato": "2020-05-26T00:00:00",
"dt_inicio": "2020-05-26T13:30:00",
"Servico": "Barba Completa"
},
{
"nome": "Beatrice Mattos",
"apelido": "Beatrice",
"dt_extrato": "2020-05-26T00:00:00",
"dt_inicio": "2020-05-26T09:30:00",
"Servico": "Corte Masculino"
},
{
"nome": "Beatrice Mattos",
"apelido": "Beatrice",
"dt_extrato": "2020-05-26T00:00:00",
"dt_inicio": "2020-05-26T09:00:00",
"Servico": "Alongamento de Cabelo"
},
{
"nome": "Beatrice Mattos",
"apelido": "Beatrice",
"dt_extrato": "2020-05-26T00:00:00",
"dt_inicio": "2020-05-26T08:00:00",
"Servico": "Corte Masculino"
},
{
"nome": "Estevan Alves",
"apelido": "Estevan",
"dt_extrato": "2020-05-25T00:00:00",
"dt_inicio": "2020-05-25T08:40:00",
"Servico": "Corte Masculino"
},
{
"nome": "Kai",
"apelido": "Martins",
"dt_extrato": "2020-05-25T00:00:00",
"dt_inicio": "2020-05-25T08:30:00",
"Servico": "Corte Masculino"
},
{
"nome": "Estevan Alves",
"apelido": "Estevan",
"dt_extrato": "2020-05-25T00:00:00",
"dt_inicio": "2020-05-25T08:00:00",
"Servico": "Corte Masculino"
}
]
我想把它转换成这个对象:
{
"2020-05-26T00:00:00": [{
"Beatrice Mattos": [
{
"nome": "Beatrice Mattos",
"apelido": "Beatrice",
"dt_extrato": "2020-05-26T00:00:00",
"dt_inicio": "2020-05-26T15:00:00",
"Servico": "Corte Masculino"
},
{
"nome": "Beatrice Mattos",
"apelido": "Beatrice",
"dt_extrato": "2020-05-26T00:00:00",
"dt_inicio": "2020-05-26T09:30:00",
"Servico": "Corte Masculino"
},
{
"nome": "Beatrice Mattos",
"apelido": "Beatrice",
"dt_extrato": "2020-05-26T00:00:00",
"dt_inicio": "2020-05-26T09:00:00",
"Servico": "Alongamento de Cabelo"
},
{
"nome": "Beatrice Mattos",
"apelido": "Beatrice",
"dt_extrato": "2020-05-26T00:00:00",
"dt_inicio": "2020-05-26T08:00:00",
"Servico": "Corte Masculino"
}
],
"Davi": [
{
"nome": "Davi",
"apelido": "Davi",
"dt_extrato": "2020-05-26T00:00:00",
"dt_inicio": "2020-05-26T14:00:00",
"Servico": "Corte Masculino"
}
],
"Kai": [
{
"nome": "Kai",
"apelido": "Martins",
"dt_extrato": "2020-05-26T00:00:00",
"dt_inicio": "2020-05-26T13:30:00",
"Servico": "Barba Completa"
}
]
}],
"2020-05-25T00:00:00": [{
"Kai": [
{
"nome": "Kai",
"apelido": "Martins",
"dt_extrato": "2020-05-26T00:00:00",
"dt_inicio": "2020-05-26T13:30:00",
"Servico": "Barba Completa"
},
{
"nome": "Kai",
"apelido": "Martins",
"dt_extrato": "2020-05-25T00:00:00",
"dt_inicio": "2020-05-25T08:30:00",
"Servico": "Corte Masculino"
}
],
"Estevan Alves": [
{
"nome": "Estevan Alves",
"apelido": "Estevan",
"dt_extrato": "2020-05-25T00:00:00",
"dt_inicio": "2020-05-25T08:40:00",
"Servico": "Corte Masculino"
},
{
"nome": "Estevan Alves",
"apelido": "Estevan",
"dt_extrato": "2020-05-25T00:00:00",
"dt_inicio": "2020-05-25T08:00:00",
"Servico": "Corte Masculino"
}
]
}]
}
我的目标是按日期和名称对服务进行分组。我只能按一个或另一个分组,不能同时分组。
要按字段 'name' 分组,我使用以下代码:
this.name_group = this.array.reduce((data, object) => {
data[object.nome] = [...data[object.nome] || [], object];
return data;
}, {});
要按字段 'dt_extrato' 分组,我使用以下代码:
this.date_group = this.array.reduce((data, object) => {
data[object.dt_extrato] = [...data[object.dt_extrato] || [], object];
return data;
}, {});
但我无法将两者分组,嵌套。这可能只使用 reduce 吗?
谢谢
如果您想获得中间没有数组的嵌套对象,您可以使用嵌套键数组来采用这种方法。
var data = [{ nome: "Beatrice Mattos", apelido: "Beatrice", dt_extrato: "2020-05-26T00:00:00", dt_inicio: "2020-05-26T15:00:00", Servico: "Corte Masculino" }, { nome: "Davi", apelido: "Davi", dt_extrato: "2020-05-26T00:00:00", dt_inicio: "2020-05-26T14:00:00", Servico: "Corte Masculino" }, { nome: "Kai", apelido: "Martins", dt_extrato: "2020-05-26T00:00:00", dt_inicio: "2020-05-26T13:30:00", Servico: "Barba Completa" }, { nome: "Beatrice Mattos", apelido: "Beatrice", dt_extrato: "2020-05-26T00:00:00", dt_inicio: "2020-05-26T09:30:00", Servico: "Corte Masculino" }, { nome: "Beatrice Mattos", apelido: "Beatrice", dt_extrato: "2020-05-26T00:00:00", dt_inicio: "2020-05-26T09:00:00", Servico: "Alongamento de Cabelo" }, { nome: "Beatrice Mattos", apelido: "Beatrice", dt_extrato: "2020-05-26T00:00:00", dt_inicio: "2020-05-26T08:00:00", Servico: "Corte Masculino" }, { nome: "Estevan Alves", apelido: "Estevan", dt_extrato: "2020-05-25T00:00:00", dt_inicio: "2020-05-25T08:40:00", Servico: "Corte Masculino" }, { nome: "Kai", apelido: "Martins", dt_extrato: "2020-05-25T00:00:00", dt_inicio: "2020-05-25T08:30:00", Servico: "Corte Masculino" }, { nome: "Estevan Alves", apelido: "Estevan", dt_extrato: "2020-05-25T00:00:00", dt_inicio: "2020-05-25T08:00:00", Servico: "Corte Masculino" }],
keys = ['dt_extrato', 'nome'],
result = data.reduce((r, object) => {
keys
.reduce((group, key, index, { length }) =>
group[object[key]] = group[object[key]] || (index + 1 === length
? []
: {}
), r)
.push(object);
return r;
}, {});
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }