Javascript 按键对数组进行分组,并在每次迭代中创建一个相关键的数组
给定一个对象数组Javascript 按键对数组进行分组,并在每次迭代中创建一个相关键的数组,javascript,Javascript,给定一个对象数组 const data = [ { id: 1, documentation_id: 4, document_id: 'nil', category_id: 1, created_at: "2020-03-29T11:06:44.000Z", updated_at: "2020-03-29T11:06:44.000Z" }, { id: 11, documentation_id: 10, document_id:
const data = [
{ id: 1,
documentation_id: 4,
document_id: 'nil',
category_id: 1,
created_at: "2020-03-29T11:06:44.000Z",
updated_at: "2020-03-29T11:06:44.000Z" },
{ id: 11,
documentation_id: 10,
document_id: 'nil',
category_id: 1,
created_at: "2020-03-29T11:06:44.000Z",
updated_at: "2020-03-29T11:06:44.000Z" },
{ id: 2,
documentation_id: 5,
document_id: '1',
category_id: 2,
created_at: "2020-03-29T11:06:44.000Z",
updated_at: "2020-03-29T11:06:44.000Z" },
{ id: 100,
documentation_id: 15,
document_id: '10',
category_id: 2,
created_at: "2020-03-29T11:06:44.000Z",
updated_at: "2020-03-29T11:06:44.000Z" },
{ id: 3,
documentation_id: 5,
document_id: '3',
category_id: 3,
created_at: "2020-03-29T11:06:44.000Z",
updated_at: "2020-03-29T11:06:44.000Z" },
{ id: 4,
documentation_id: 6,
document_id: '1',
category_id: 4,
created_at: "2020-03-29T11:06:44.000Z",
updated_at: "2020-03-29T11:06:44.000Z" },
{ id: 5,
documentation_id: 6,
document_id: '3',
category_id: 5,
created_at: "2020-03-29T11:06:44.000Z",
updated_at: "2020-03-29T11:06:44.000Z" },
{ id: 6,
documentation_id: 6,
document_id: '5',
category_id: 1,
created_at: "2020-03-29T11:06:44.000Z",
updated_at: "2020-03-29T11:06:44.000Z"
},
{ id: 7,
documentation_id: 7,
document_id: '1',
category_id: 6,
created_at: "2020-03-29T11:06:44.000Z",
updated_at: "2020-03-29T11:06:44.000Z"}]
我希望能够通过category_id进行分组,结果如下所示
const data = [{
category_id: 1,
documentation: [{
document_id: "nil",
documentation_id: 4
}, {
document_id: "nil",
documentation_id: 10
}, {
document_id: "5",
documentation_id: 6
}]
}, {
category_id: 2,
documentation: [{
document_id: "1",
documentation_id: 5
}, {
document_id: "10",
documentation_id: 15
}]
}, {
category_id: 3,
documentation: [{
document_id: "3",
documentation_id: 5
}]
}, {
category_id: 4,
documentation: [{
document_id: "1",
documentation_id: 6
}]
}, {
category_id: 5,
documentation: [{
document_id: "3",
documentation_id: 6
}]
}, {
category_id: 6,
documentation: [{
document_id: "1",
documentation_id: 7
}]
}]
如果类别存在不止一次,请创建文档数组并将该类别中的文档推送到数组中。如果该类别只存在一次,则将该类别的唯一文档推送到数组中
这是我提出的低效解决方案。我想优化解决方案
function groupDocumentationByCategory(data) {
const result = [];
const formattedArray = data.slice(0);
const seen = [];
for (let k = 0; k < data.length; k++) {
if (seen.indexOf(data[k].category_id) < 0) {
seen.push(data[k].category_id);
formattedArray[k].documentation = [];
for (let j = 0; j < formattedArray.length; j++) {
if (data[k].category_id === data[j].category_id) {
formattedArray[k].documentation.push({
document_id: formattedArray[j].document_id,
documentation_id: formattedArray[j].documentation_id,
});
delete data[k].documentation_id;
delete data[k].document_id;
delete data[k].created_at;
delete data[k].updated_at;
}
}
result.push(data[k]);
}
}
return result;
}
功能组文档按类别(数据){
常量结果=[];
const formattedArray=data.slice(0);
const seen=[];
for(设k=0;k
迭代数组并构造一个对象,该对象由类别id
索引。第一次找到category\u id
时,创建id
和category\u id
属性,并将documentation
属性初始化为空数组。然后推到那个数组。最后,获取对象的值:
const data=[{id:1,文档id:4,文档id:“nil”,类别id:1,创建地点:“2020-03-29T11:06:44.000Z”,更新地点:“2020-03-29T11:06:44.000Z”},{id:11,文档id:10,文档id:“nil”,类别id:1,创建地点:“2020-03-29T11:06:44.000Z”,更新地点:“2020-03-29T11:06:44.000Z”,更新地点:“2020-03-29T11:06:44.000Z”,文档id:5,{,类别id:2,创建地址:“2020-03-29T11:06:44.000Z”,更新地址:“2020-03-29T11:06:44.000Z”},{id:100,文档id:15,文档id:10,类别id:2,创建地址:“2020-03-29T11:06:44.000Z”,更新地址:“2020-03-29T11:06:44.000Z”},{id:3,文档id:5,文档id:3,文档id:3,类别id:3,创建地址:“2020-03-29T11:06:44.000Z”,更新地址:“2020-03-03:06:44.000Z”“2020-03-29T11:06:44.000Z”{id:4,文档id:6,文档id:“1”,类别id:4,创建地址:“2020-03-29T11:06:44.000Z”,更新地址:“2020-03-29T11:06:44.000Z”},{id:5,文档id:6,文档id:“3”,类别id:5,创建地址:“2020-03-29T11:06:44.000Z”,更新地址:“2020-03-29T11:06:44.000Z”,文档id:6,文档id:,类别id:1,创建地址:“2020-03-29T11:06:44.000Z”,更新地址:“2020-03-29T11:06:44.000Z”},{id:7,文档id:7,文档id:1,类别id:6,创建地址:“2020-03-29T11:06:44.000Z”,更新地址:“2020-03-29T11:06:44.000Z”};
const dataByCategory={};
用于(数据的常量{id、类别{id、文档{id}){
如果(!dataByCategory[类别id]){
dataByCategory[类别id]={
身份证件
类别识别码,
文件:[]
};
}
dataByCategory[category_id].documentation.push({document_id,documentation_id});
}
log(Object.values(dataByCategory))
迭代数组并构造一个对象,该对象由category\u id
索引。第一次找到category\u id
时,创建id
和category\u id
属性,并将documentation
属性初始化为空数组。然后推到那个数组。最后,获取对象的值:
const data=[{id:1,文档id:4,文档id:“nil”,类别id:1,创建地点:“2020-03-29T11:06:44.000Z”,更新地点:“2020-03-29T11:06:44.000Z”},{id:11,文档id:10,文档id:“nil”,类别id:1,创建地点:“2020-03-29T11:06:44.000Z”,更新地点:“2020-03-29T11:06:44.000Z”,更新地点:“2020-03-29T11:06:44.000Z”,文档id:5,{,类别id:2,创建地址:“2020-03-29T11:06:44.000Z”,更新地址:“2020-03-29T11:06:44.000Z”},{id:100,文档id:15,文档id:10,类别id:2,创建地址:“2020-03-29T11:06:44.000Z”,更新地址:“2020-03-29T11:06:44.000Z”},{id:3,文档id:5,文档id:3,文档id:3,类别id:3,创建地址:“2020-03-29T11:06:44.000Z”,更新地址:“2020-03-03:06:44.000Z”“2020-03-29T11:06:44.000Z”{id:4,文档id:6,文档id:“1”,类别id:4,创建地址:“2020-03-29T11:06:44.000Z”,更新地址:“2020-03-29T11:06:44.000Z”},{id:5,文档id:6,文档id:“3”,类别id:5,创建地址:“2020-03-29T11:06:44.000Z”,更新地址:“2020-03-29T11:06:44.000Z”,文档id:6,文档id:,类别id:1,创建地址:“2020-03-29T11:06:44.000Z”,更新地址:“2020-03-29T11:06:44.000Z”},{id:7,文档id:7,文档id:1,类别id:6,创建地址:“2020-03-29T11:06:44.000Z”,更新地址:“2020-03-29T11:06:44.000Z”};
const dataByCategory={};
用于(数据的常量{id、类别{id、文档{id}){
如果(!dataByCategory[类别id]){
dataByCategory[类别id]={
身份证件
类别识别码,
文件:[]
};
}
dataByCategory[category_id].documentation.push({document_id,documentation_id});
}
log(Object.values(dataByCategory))
您可以使用Array.prototype.reduce
结合一些Array.prototype.map
来实现结果
也许会有帮助
var数据=[{
id:1,
文件编号:4,
文件编号:“无”,
类别识别号:1,
创建于:“2020-03-29T11:06:44.000Z”,
更新地址:“2020-03-29T11:06:44.000Z”
},
{
id:11,
文件编号:10,
文件编号:“无”,
类别识别号:1,
创建于:“2020-03-29T11:06:44.000Z”,
更新地址:“2020-03-29T11:06:44.000Z”
},
{
id:2,
文件编号:5,
文件编号:“1”,
类别