我有bellow 4数组对象

var dataArray1 = [
{'ProjectID': '001', 'Project': 'Main Project 1', 'StartYear': '2023', 'EndYear': '2023', 
'StartMonth': 'Sep', 'EndMonth': 'Dec', 'Owner':'Tom' , 'Status':'Passed', 'Category' : 
'Main'},
{'ProjectID': '002',  'Project': 'Main Project 2', 'StartYear': '2024', 'EndYear': '2024', 
'StartMonth': 'Jan', 'EndMonth': 'May', 'Owner':'Tom' , 'Status':'Inprogress', 'Category' : 
'Main'},
];

var dataArray2 = [
{'ProjectID': '001', 'SubProjectID': '001', 'Project': 'Sub Project 1', 'StartYear': '2023', 
'EndYear': '2023', 'StartMonth': 'Oct', 'EndMonth': 'Dec', 'Owner':'Tom' , 'Status':'Passed', 
'Category' : 'Pahse'},
{'ProjectID': '002', 'SubProjectID': '001', 'Project': 'Sub Project 1', 'StartYear': '2024', 
'EndYear': '2024', 'StartMonth': 'Jan', 'EndMonth': 'Feb', 'Owner':'Tom' , 
'Status':'Inprogress', 'Category' : 'Pahse'},
{'ProjectID': '002', 'SubProjectID': '002', 'Project': 'Sub Project 2', 'StartYear': '2024', 
'EndYear': '2024', 'StartMonth': 'Jan', 'EndMonth': 'Feb', 'Owner':'Tom' , 
'Status':'Inprogress', 'Category' : 'Pahse'},
{'ProjectID': '002', 'SubProjectID': '003', 'Project': 'Sub Project 3', 'StartYear': '2024', 
'EndYear': '2024', 'StartMonth': 'Feb', 'EndMonth': 'Mar', 'Owner':'Tom' , 'Status':'Yet to 
Start', 'Category' : 'Pahse'},
{'ProjectID': '002', 'SubProjectID': '004', 'Project': 'Sub Project 4', 'StartYear': '2024', 
'EndYear': '2024', 'StartMonth': 'Mar', 'EndMonth': 'May', 'Owner':'Tom' , 'Status':'Yet to 
Start', 'Category' : 'Pahse'},
];

var dataArray3 = [
  {'ProjectID': '001', 'SubProjectID': '001', 'MilestoneID': '001', 'Project': 'Milestone 1', 
'StartYear': '2023', 'EndYear': '2023', 'StartMonth': 'Oct', 'EndMonth': 'Nov', 'Owner':'Tom' 
, 'Status':'Passed', 'Category' : 'Milestone'},      
  {'ProjectID': '001', 'SubProjectID': '001', 'MilestoneID': '002', 'Project': 'Milestone 2', 
'StartYear': '2023', 'EndYear': '2023', 'StartMonth': 'Nov', 'EndMonth': 'Dec', 'Owner':'Tom' 
, 'Status':'Passed', 'Category' : 'Milestone'},
  {'ProjectID': '002', 'SubProjectID': '001', 'MilestoneID': '001','Project': 'Milestone 1', 
'StartYear': '2024', 'EndYear': '2024', 'StartMonth': 'Jan', 'EndMonth': 'Feb', 'Owner':'Tom' 
, 'Status':'Yet to Start', 'Category' : 'Milestone'},
  {'ProjectID': '002', 'SubProjectID': '002', 'MilestoneID': '001', 'Project': 'Milestone 1', 
'StartYear': '2024', 'EndYear': '2024', 'StartMonth': 'Jan', 'EndMonth': 'Feb', 'Owner':'Tom' 
, 'Status':'Inprogress', 'Category' : 'Milestone'},
  {'ProjectID': '002', 'SubProjectID': '003', 'MilestoneID': '001', 'Project': 'Milestone 1', 
'StartYear': '2024', 'EndYear': '2024', 'StartMonth': 'Feb', 'EndMonth': 'Feb', 'Owner':'Tom' 
, 
'Status':'Yet to Start', 'Category' : 'Milestone'},
  {'ProjectID': '002', 'SubProjectID': '003', 'MilestoneID': '002', 'Project': 'Milestone 2', 
'StartYear': '2024', 'EndYear': '2024', 'StartMonth': 'Feb', 'EndMonth': 'Mar', 'Owner':'Tom' 
, 
'Status':'Yet to Start', 'Category' : 'Milestone'},
  {'ProjectID': '002', 'SubProjectID': '004', 'MilestoneID': '001', 'Project': 'Milestone 1', 
'StartYear': '2024', 'EndYear': '2024', 'StartMonth': 'Mar', 'EndMonth': 'May', 'Owner':'Tom' 
, 
'Status':'Yet to Start', 'Category' : 'Milestone'},
];

 var dataArray4 = [
    {'ProjectID': '001', 'SubProjectID': '001', 'MilestoneID': '001', 'Project': 'Activity 1', 
'StartYear': '2023', 'EndYear': '2023', 'StartMonth': 'Oct', 'EndMonth': 'Nov', 'Owner':'Tom' 
, 
'Status':'Passed', 'Category' : 'Activity'},     
    {'ProjectID': '001', 'SubProjectID': '001', 'MilestoneID': '002', 'Project': 'Activity 1', 
'StartYear': '2023', 'EndYear': '2023', 'StartMonth': 'Nov', 'EndMonth': 'Nov', 'Owner':'Tom' 
, 
'Status':'Passed', 'Category' : 'Activity'},
    {'ProjectID': '001', 'SubProjectID': '001', 'MilestoneID': '002', 'Project': 'Activity 2', 
'StartYear': '2023', 'EndYear': '2023', 'StartMonth': 'Nov', 'EndMonth': 'Dec', 'Owner':'Tom' 
, 
'Status':'Passed', 'Category' : 'Activity'},
    {'ProjectID': '002', 'SubProjectID': '001', 'MilestoneID': '001', 'Project': 'Activity 1', 
'StartYear': '2024', 'EndYear': '2024', 'StartMonth': 'Jan', 'EndMonth': 'Feb', 'Owner':'Tom' 
, 
'Status':'Yet to Start', 'Category' : 'Activity'},
];

我try 在最终数组对象下面存档

var dataArrayfinal = [

{'ProjectID': '001', 'Project': 'Main Project 1', 'StartYear': '2023', 'EndYear': '2023', 
'StartMonth': 'Sep', 'EndMonth': 'Dec', 'Owner':'Tom' , 'Status':'Passed', 'Category' : 
 'Main'},
{'ProjectID': '001', 'SubProjectID': '001', 'Project': 'Sub Project 1', 'StartYear': '2023', 
'EndYear': '2023', 'StartMonth': 'Oct', 'EndMonth': 'Dec', 'Owner':'Tom' , 'Status':'Passed', 
'Category' : 'Pahse'},
  {'ProjectID': '001', 'SubProjectID': '001', 'MilestoneID': '001', 'Project': 'Milestone 1', 
'StartYear': '2023', 'EndYear': '2023', 'StartMonth': 'Oct', 'EndMonth': 'Nov', 'Owner':'Tom' 
, 'Status':'Passed', 'Category' : 'Milestone'},
    {'ProjectID': '001', 'SubProjectID': '001', 'MilestoneID': '001', 'Project': 'Activity 1', 
 'StartYear': '2023', 'EndYear': '2023', 'StartMonth': 'Oct', 'EndMonth': 'Nov', 'Owner':'Tom' 
 , 'Status':'Passed', 'Category' : 'Activity'},
  {'ProjectID': '001', 'SubProjectID': '001', 'MilestoneID': '002', 'Project': 'Milestone 2', 
  'StartYear': '2023', 'EndYear': '2023', 'StartMonth': 'Nov', 'EndMonth': 'Dec', 
 'Owner':'Tom' , 'Status':'Passed', 'Category' : 'Milestone'},
    {'ProjectID': '001', 'SubProjectID': '001', 'MilestoneID': '002', 'Project': 'Activity 1', 
  'StartYear': '2023', 'EndYear': '2023', 'StartMonth': 'Nov', 'EndMonth': 'Nov', 
   'Owner':'Tom' , 'Status':'Passed', 'Category' : 'Activity'},
    {'ProjectID': '001', 'SubProjectID': '001', 'MilestoneID': '002', 'Project': 'Activity 2', 
   'StartYear': '2023', 'EndYear': '2023', 'StartMonth': 'Nov', 'EndMonth': 'Dec', 
   'Owner':'Tom' , 'Status':'Passed', 'Category' : 'Activity'},

   {'ProjectID': '002', 'Project': 'Main Project 2', 'StartYear': '2024', 'EndYear': '2024', 
   'StartMonth': 'Jan', 'EndMonth': 'May', 'Owner':'Tom' , 'Status':'Inprogress', 'Category' : 
   'Main'},
   {'ProjectID': '002', 'SubProjectID': '001', 'Project': 'Sub Project 1', 'StartYear': 
   '2024', 
   'EndYear': '2024', 'StartMonth': 'Jan', 'EndMonth': 'Feb', 'Owner':'Tom' , 'Status':'Inprogress', 'Category' : 'Pahse'},
  {'ProjectID': '002', 'SubProjectID': '001', 'MilestoneID': '001','Project': 'Milestone 1', 'StartYear': '2024', 'EndYear': '2024', 'StartMonth': 'Jan', 'EndMonth': 'Feb', 'Owner':'Tom' , 'Status':'Yet to Start', 'Category' : 'Milestone'},
    {'ProjectID': '002', 'SubProjectID': '001', 'MilestoneID': '001', 'Project': 'Activity 1', 'StartYear': '2024', 'EndYear': '2024', 'StartMonth': 'Jan', 'EndMonth': 'Feb', 'Owner':'Tom' , 'Status':'Yet to Start', 'Category' : 'Activity'},

{'ProjectID': '002', 'SubProjectID': '002', 'Project': 'Sub Project 2', 'StartYear': '2024', 'EndYear': '2024', 'StartMonth': 'Jan', 'EndMonth': 'Feb', 'Owner':'Tom' , 'Status':'Inprogress', 'Category' : 'Pahse'},
  {'ProjectID': '002', 'SubProjectID': '002',  'MilestoneID': '001', 'Project': 'Milestone 1', 'StartYear': '2024', 'EndYear': '2024', 'StartMonth': 'Jan', 'EndMonth': 'Feb', 'Owner':'Tom' , 'Status':'Inprogress', 'Category' : 'Milestone'},

{'ProjectID': '002', 'SubProjectID': '003', 'Project': 'Sub Project 3', 'StartYear': '2024', 'EndYear': '2024', 'StartMonth': 'Feb', 'EndMonth': 'Mar', 'Owner':'Tom' , 'Status':'Yet to Start', 'Category' : 'Pahse'},
  {'ProjectID': '002', 'SubProjectID': '003', 'MilestoneID': '001', 'Project': 'Milestone 1', 'StartYear': '2024', 'EndYear': '2024', 'StartMonth': 'Feb', 'EndMonth': 'Feb', 'Owner':'Tom' , 'Status':'Yet to Start', 'Category' : 'Milestone'},
  {'ProjectID': '002', 'SubProjectID': '003', 'MilestoneID': '002', 'Project': 'Milestone 2', 'StartYear': '2024', 'EndYear': '2024', 'StartMonth': 'Feb', 'EndMonth': 'Mar', 'Owner':'Tom' , 'Status':'Yet to Start', 'Category' : 'Milestone'},

{'ProjectID': '002', 'SubProjectID': '004', 'Project': 'Sub Project 4', 'StartYear': '2024', 'EndYear': '2024', 'StartMonth': 'Mar', 'EndMonth': 'May', 'Owner':'Tom' , 'Status':'Yet to Start', 'Category' : 'Pahse'},
  {'ProjectID': '002', 'SubProjectID': '004', 'MilestoneID': '001', 'Project': 'Milestone 1', 'StartYear': '2024', 'EndYear': '2024', 'StartMonth': 'Mar', 'EndMonth': 'May', 'Owner':'Tom' , 'Status':'Yet to Start', 'Category' : 'Milestone'},
];

我try 了以下代码,并通过匹配子项目ID成功地将第一个数组和第二个数组组合在一起

var dataArrayfinal = [];

 // Iterate over dataArray1
 for (var i = 0; i < dataArray1.length; i++) {
 dataArrayfinal.push(dataArray1[i]);

 // Find matching items in dataArray2
var matchingItems2 = dataArray2.filter(item => item.ProjectID === dataArray1[i].ProjectID);
dataArrayfinal = dataArrayfinal.concat(matchingItems2);

}

我无法移动和添加里程碑数组和活动array.有没有办法把这个存档?

基本上我想要的是结合我的第一个数组,其中包含第二个数组,这是我的子项目数组的主要项目的细节.然后将其与里程碑数组结合起来.最后是活动array.但同时这需要遵循的顺序.项目-子项目-里程碑-活动

推荐答案

你可以 Select 一个多层次的分组

  • ProjectID
  • SubProjectID
  • MilestoneID

并以平面数组为结果.

const
    data1 = [{ ProjectID: "001", Project: "Main Project 1", StartYear: "2023", EndYear: "2023", StartMonth: "Sep", EndMonth: "Dec", Owner: "Tom", Status: "Passed", Category: "Main" }, { ProjectID: "002", Project: "Main Project 2", StartYear: "2024", EndYear: "2024", StartMonth: "Jan", EndMonth: "May", Owner: "Tom", Status: "Inprogress", Category: "Main" }],
    data2 = [{ ProjectID: "001", SubProjectID: "001", Project: "Sub Project 1", StartYear: "2023", EndYear: "2023", StartMonth: "Oct", EndMonth: "Dec", Owner: "Tom", Status: "Passed", Category: "Pahse" }, { ProjectID: "002", SubProjectID: "001", Project: "Sub Project 1", StartYear: "2024", EndYear: "2024", StartMonth: "Jan", EndMonth: "Feb", Owner: "Tom", Status: "Inprogress", Category: "Pahse" }, { ProjectID: "002", SubProjectID: "002", Project: "Sub Project 2", StartYear: "2024", EndYear: "2024", StartMonth: "Jan", EndMonth: "Feb", Owner: "Tom", Status: "Inprogress", Category: "Pahse" }, { ProjectID: "002", SubProjectID: "003", Project: "Sub Project 3", StartYear: "2024", EndYear: "2024", StartMonth: "Feb", EndMonth: "Mar", Owner: "Tom", Status: "Yet to Start", Category: "Pahse" }, { ProjectID: "002", SubProjectID: "004", Project: "Sub Project 4", StartYear: "2024", EndYear: "2024", StartMonth: "Mar", EndMonth: "May", Owner: "Tom", Status: "Yet to Start", Category: "Pahse" }],
    data3 = [{ ProjectID: "001", SubProjectID: "001", MilestoneID: "001", Project: "Milestone 1", StartYear: "2023", EndYear: "2023", StartMonth: "Oct", EndMonth: "Nov", Owner: "Tom", Status: "Passed", Category: "Milestone" }, { ProjectID: "001", SubProjectID: "001", MilestoneID: "002", Project: "Milestone 2", StartYear: "2023", EndYear: "2023", StartMonth: "Nov", EndMonth: "Dec", Owner: "Tom", Status: "Passed", Category: "Milestone" }, { ProjectID: "002", SubProjectID: "001", MilestoneID: "001", Project: "Milestone 1", StartYear: "2024", EndYear: "2024", StartMonth: "Jan", EndMonth: "Feb", Owner: "Tom", Status: "Yet to Start", Category: "Milestone" }, { ProjectID: "002", SubProjectID: "002", MilestoneID: "001", Project: "Milestone 1", StartYear: "2024", EndYear: "2024", StartMonth: "Jan", EndMonth: "Feb", Owner: "Tom", Status: "Inprogress", Category: "Milestone" }, { ProjectID: "002", SubProjectID: "003", MilestoneID: "001", Project: "Milestone 1", StartYear: "2024", EndYear: "2024", StartMonth: "Feb", EndMonth: "Feb", Owner: "Tom", Status: "Yet to Start", Category: "Milestone" }, { ProjectID: "002", SubProjectID: "003", MilestoneID: "002", Project: "Milestone 2", StartYear: "2024", EndYear: "2024", StartMonth: "Feb", EndMonth: "Mar", Owner: "Tom", Status: "Yet to Start", Category: "Milestone" }, { ProjectID: "002", SubProjectID: "004", MilestoneID: "001", Project: "Milestone 1", StartYear: "2024", EndYear: "2024", StartMonth: "Mar", EndMonth: "May", Owner: "Tom", Status: "Yet to Start", Category: "Milestone" }],
    data4 = [{ ProjectID: "001", SubProjectID: "001", MilestoneID: "001", Project: "Activity 1", StartYear: "2023", EndYear: "2023", StartMonth: "Oct", EndMonth: "Nov", Owner: "Tom", Status: "Passed", Category: "Activity" }, { ProjectID: "001", SubProjectID: "001", MilestoneID: "002", Project: "Activity 1", StartYear: "2023", EndYear: "2023", StartMonth: "Nov", EndMonth: "Nov", Owner: "Tom", Status: "Passed", Category: "Activity" }, { ProjectID: "001", SubProjectID: "001", MilestoneID: "002", Project: "Activity 2", StartYear: "2023", EndYear: "2023", StartMonth: "Nov", EndMonth: "Dec", Owner: "Tom", Status: "Passed", Category: "Activity" }, { ProjectID: "002", SubProjectID: "001", MilestoneID: "001", Project: "Activity 1", StartYear: "2024", EndYear: "2024", StartMonth: "Jan", EndMonth: "Feb", Owner: "Tom", Status: "Yet to Start", Category: "Activity" }],
    data = [...data1, ...data2, ...data3, ...data4],
    keys = ['ProjectID', 'SubProjectID', 'MilestoneID'],
    groupBy = (data, [key, ...rest]) => {
        if (key === undefined) return data;

        const
            getValue = key => object => object[key] ?? '';

        return Object
            .values(Object.groupBy(data, getValue(key)))
            .map(data => groupBy(data, rest));
    },
    result = groupBy(data, keys).flat(Infinity);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

Javascript相关问答推荐

微软Edge Select 间隙鼠标退出问题

当在select中 Select 选项时,我必须禁用不匹配的 Select

单击子元素时关闭父元素(JS)

react/redux中的formData在expressjs中返回未定义的req.params.id

从mat—country—select获取整个Country数组

基于变量切换隐藏文本

点击按钮一次有文本出现和褪色,而不是点击两次?(html,CSS,JavaScript)

Spring boot JSON解析错误:意外字符错误

给定一个凸多边形作为一组边,如何根据到最近边的距离填充里面的区域

函数返回与输入对象具有相同键的对象

如何在模块层面提供服务?

用于编辑CSS样式的Java脚本

如何在Vue 3中创建自定义 Select 组件,并将选项作为HTML而不是props 传递?

使用带有HostBinding的Angular 信号来更新样式?

Next.js无法从外部本地主机获取图像

Socket.IO在刷新页面时执行函数两次

Pevent触发material 用户界面数据网格中的自动保存

AstroJS混合模式服务器终结点返回404

JS/css:将数字输入的S函数和可调整大小的元素S函数绑定在一起

此上下文在JavaScript中