Javascript数组是否将父级和子级排列为数组?
如何创建嵌套子级为数组格式的父级?子项将依赖于父项id,它们将作为“squads”键下的数组进行分组 样本输入:Javascript数组是否将父级和子级排列为数组?,javascript,Javascript,如何创建嵌套子级为数组格式的父级?子项将依赖于父项id,它们将作为“squads”键下的数组进行分组 样本输入: let sample = [ { tribe_id: 1, tribe_name: "Tribe A", squad_id: 1, squad_name: "Squad A" }, { tribe_id: 1, tribe_name: "Tribe A", squad_id: 2, squad_name: "Squad B" }
let sample = [
{ tribe_id: 1, tribe_name: "Tribe A", squad_id: 1, squad_name: "Squad A" },
{ tribe_id: 1, tribe_name: "Tribe A", squad_id: 2, squad_name: "Squad B" },
{ tribe_id: 2, tribe_name: "Tribe B", squad_id: 3, squad_name: "Squad C" }
];
console.log(sample);
期望输出:
let desiredFormat = [
{
tribe_id: 1, tribe_name: "Tribe A", squads: [
{squad_id: 1, squad_name: "Squad A"},
{squad_id: 2, squad_name: "Squad B"}
]
},
{
tribe_id: 2, tribe_name: "Tribe B", squads: [
{squad_id: 3, squad_name: "Squad C"}
]
}
];
console.log(desiredFormat);
到目前为止,我尝试的是:
let origArray = sample;
let tempArray = [];
let finalArr = [];
for (let i = 0; i < origArray.length; i++) {
tempArray.push({ tribe_id: origArray[i].tribe_id, tribe_name: origArray[i].tribe_name, squads: [ origArray[i].squad_id] });
}
for (let i = 0; i < tempArray.length; i++) {
let uniqueTribeId = tempArray[i].tribe_id;
for (let z = 0; z < origArray.length; z++) {
if (uniqueTribeId == origArray[z].tribe_id) {
finalArr.push( { tribe_id: uniqueTribeId, squads: [] });
}
}
}
让origaray=样本;
设tempArray=[];
设finalArr=[];
for(设i=0;i
我的工作解决方案:
let final = [];
let sample = [
{ tribe_id: 1, tribe_name: "Tribe A", squad_id: 1, squad_name: "Squad A" },
{ tribe_id: 1, tribe_name: "Tribe A", squad_id: 2, squad_name: "Squad B" },
{ tribe_id: 2, tribe_name: "Tribe B", squad_id: 3, squad_name: "Squad C" }
];
console.log(sample);
const uniqueTribes = sample.reduce((acc, current) => {
const x = acc.find(item => item.tribe_id === current.tribe_id);
if (!x) {
// return acc.concat([current]);
return acc.concat([{ "tribe_id": current.tribe_id, "tribe_name": current.tribe_name, "squads": [] }]);
}
return acc;
}, []);
// console.log(uniqueTribes);
for (let i = 0; i < uniqueTribes.length; i++) {
let uniqueTribeName = uniqueTribes[i].tribe_name;
let uniqueTribeId = uniqueTribes[i].tribe_id;
for (let x = 0; x < sample.length; x++) {
let squadName = sample[x].squad_name;
let squadId = sample[x].squad_id;
if (uniqueTribeId == sample[x].tribe_id) {
// uniqueTribes[i].squads.push({ squad_id: sample[x].squad_id, squad_name: sample[x].squad_name });
uniqueTribes[i].squads.push({ squad_id: squadId, squad_name: squadName });
}
}
// let uniqueTribeId = sample[i].squad_name;
}
console.log(uniqueTribes);
let tribe = [];
// console.log(tribe);
let desiredFormat = [
{
tribe_id: 1, tribe_name: "Tribe A", squads: [
{squad_id: 1, squad_name: "Squad A"},
{squad_id: 2, squad_name: "Squad B"}
]
},
{
tribe_id: 2, tribe_name: "Tribe B", squads: [
{squad_id: 3, squad_name: "Squad C"}
]
}
];
let final=[];
让样本=[
{部落id:1,部落名称:“部落A”,小队id:1,小队名称:“小队A”},
{部落id:1,部落名称:“部落A”,小队id:2,小队名称:“小队B”},
{部落编号:2,部落名称:“部落B”,小队编号:3,小队名称:“小队C”}
];
控制台日志(示例);
const uniqueTribes=sample.reduce((acc,current)=>{
const x=acc.find(item=>item.tribe\u id===current.tribe\u id);
如果(!x){
//返回acc.concat([当前]);
返回acc.concat([{“tribe_id”:current.tribe_id,“tribe_name”:current.tribe_name,“squads:[]}]);
}
返回acc;
}, []);
//控制台日志(唯一);
for(设i=0;i
我并不完全清楚输出与输入之间的关系。我不会否决它,但正如@Liam所提到的,这看起来非常像一些指定的家庭作业,而你似乎并没有真正尝试过这样做。到目前为止你都试了些什么?对不起,我的最后期限很紧,睡眠不足,没有正确地构造问题。现在编辑。@marknt15请编辑问题,不要在评论中添加详细信息