Javascript数组是否将父级和子级排列为数组?

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" }

如何创建嵌套子级为数组格式的父级?子项将依赖于父项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" },
          { 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请编辑问题,不要在评论中添加详细信息