是否有一种方法可以消除javascript数组的重复并合并数据值?
我正在使用ajax请求获取一些XML数据,然后需要将这些数据放入fusioncharts中的图表中 XML数据的格式为[花费的时间],[完成的工作],[为哪个团队完成],[谁做的](见下文) 我正在迭代XML,然后使用下面的代码构建数组:是否有一种方法可以消除javascript数组的重复并合并数据值?,javascript,jquery,arrays,Javascript,Jquery,Arrays,我正在使用ajax请求获取一些XML数据,然后需要将这些数据放入fusioncharts中的图表中 XML数据的格式为[花费的时间],[完成的工作],[为哪个团队完成],[谁做的](见下文) 我正在迭代XML,然后使用下面的代码构建数组: //Time Recorded if (columnidchecker == 7781) { timearray.push($j(this).find('displayD
//Time Recorded
if (columnidchecker == 7781) {
timearray.push($j(this).find('displayData').text());
temp1 = $j(this).find('displayData').text();
}
//Type of Activity
if (columnidchecker == 7782) {
activityarray.push($j(this).find('displayData').text());
temp2 = $j(this).find('displayData').text();
}
//Team Done For
if (columnidchecker == 7783) {
subjectarray.push($j(this).find('displayData').text());
temp3 = $j(this).find('displayData').text();
}
//Name
if (columnidchecker == 7777) {
internalclientarray.push($j(this).find('displayData').text());
temp4 = $j(this).find('userDisplayName').text();
}
});
//PUSH INTO A NEW ARRAY WHICH CAN THEN BE SORTED AND DE-DUPED WITH TIME COMBINED AGAINST ACTIVITY / TEAM.
objectarray.push([temp1, temp2, temp3, temp4]);
这将从XML构建一个条目数组,该数组基本上输出如下所示:
0: (4) ["1.50", "Ad-hoc queries or calls", "Team 1", "James"]
1: (4) ["2.50", "Ad-hoc queries or calls", "Team 1", "James"]
2: (4) ["1.00", "Advice", "Team 2", "James"]
3: (4) ["3.50", "Meeting (External 3rd Party)", "Team 1", "James"]
4: (4) ["1.20", "Administration", Team 2", "James"]
5: (4) ["5.50", "Advice", "Team 1", "John"]
我正在尝试用fusioncharts创建一个图表,它需要如下所示的格式(忽略脚部填充物-它直接取自fusioncharts帮助页面!)
我遇到的问题是,我无法解决如何将包含时间、活动、团队、名称的数据数组放入类别中
我认为第一步是创建一个新的名称数组,它可以被推送到fusioncharts中的“Category”数据字段中
然后,我需要一种方法来记录每个活动和每个团队的记录时间,确保在堆叠条形图中分配给正确的人,并结合花费的时间。(例如,“James”总共花了4个小时为团队1执行“临时查询和呼叫”,但这被分为两个时间条目,因此我需要一种方法将它们合并为一个。)
在此方面的任何帮助都将不胜感激
我可以使用以下代码对名称进行重复数据消除以创建新数组:
namesarray.push(temp4);
uniq = [...new Set(namesarray)];
但从那以后,事情就变得相当复杂了 也许这会对你有所帮助。它可能不是你想要的形式,但它展示了如何将问题分解成更小的部分 伪代码:
const testData=[
[
"1.50",
“临时查询或呼叫”,
“第一队”,
“詹姆斯”
],
[
"2.50",
“临时查询或呼叫”,
“第一队”,
“詹姆斯”
],
[
"1.00",
“忠告”,
“第二小组”,
“詹姆斯”
],
[
"3.50",
“会议(外部第三方)”,
“第一队”,
“詹姆斯”
],
[
"1.20",
“管理”,
“第二小组”,
“詹姆斯”
],
[
"5.50",
“忠告”,
“第一队”,
“约翰”
]
];
常量columnIndexByName={
任务持续时间:0,
任务名称:1,
对于哪个团队:2,
执行任务的人员:3
};
常量和=(acc,next)=>acc+next;
const uniqueNames=[…新集合(testData.map(row=>row[columnIndexByName.PERSON\u DOING\u TASK]));
const uniqueTaskNames=[…新集合(testData.map(row=>row[columnIndexByName.TASK_NAME]));
让结果={};
uniqueNames.forEach(personName=>{
const personDataRows=testData.filter(行=>row[columnIndexByName.PERSON\u DOING\u TASK]==personName);
让taskDurationsByTaskName={};
uniqueTaskNames.forEach(taskName=>{
const taskRows=personDataRows.filter(行=>row[columnIndexByName.TASK\u NAME]==taskName);
const taskDurations=taskRows.map(row=>Number.parseFloat(row[columnIndexByName.TASK_DURATION]);
const taskTotalDuration=任务持续时间。减少(总和,0);
taskDurationsByTaskName[taskName]=taskTotalDuration;
})
结果[personName]=任务持续时间ByTaskName;
})
const renderData=data=>document.querySelector(“输出”).innerHTML=JSON.stringify(数据,null,2);
渲染数据(结果)代码>
也许这会对你有所帮助。它可能不是你想要的形式,但它展示了如何将问题分解成更小的部分
伪代码:
获取唯一的名称李>
获取唯一的“任务”名称(因为缺少
(更好的词)
对于每个唯一的人名:
3.1。获取此人的数据行
3.2对于所有唯一任务名称的每个:
查找与任务名称匹配的人员数据行
对这些数据行的持续时间求和
const testData=[
[
"1.50",
“临时查询或呼叫”,
“第一队”,
“詹姆斯”
],
[
"2.50",
“临时查询或呼叫”,
“第一队”,
“詹姆斯”
],
[
"1.00",
“忠告”,
“第二小组”,
“詹姆斯”
],
[
"3.50",
“会议(外部第三方)”,
“第一队”,
“詹姆斯”
],
[
"1.20",
“管理”,
“第二小组”,
“詹姆斯”
],
[
"5.50",
“忠告”,
“第一队”,
“约翰”
]
];
常量columnIndexByName={
任务持续时间:0,
任务名称:1,
对于哪个团队:2,
执行任务的人员:3
};
常量和=(acc,next)=>acc+next;
const uniqueNames=[…新集合(testData.map(row=>row[columnIndexByName.PERSON\u DOING\u TASK]));
const uniqueTaskNames=[…新集合(testData.map(row=>row[columnIndexByName.TASK_NAME]));
让结果={};
uniqueNames.forEach(personName=>{
const personDataRows=testData.filter(行=>row[columnIndexByName.PERSON\u DOING\u TASK]==personName);
让taskDurationsByTaskName={};
uniqueTaskNames.forEach(taskName=>{
const taskRows=personDataRows.filter(行=>row[columnIndexByName.TASK\u NAME]==taskName);
const taskDurations=taskRows.map(row=>Number.parseFloat(row[columnIndexByName.TASK_DURATION]);
const taskTotalDuration=任务持续时间。减少(总和,0);
taskDurationsByTaskName[taskName]=taskTotalDuration;
})
结果[personName]=任务持续时间ByTaskName;
})
const renderData=data=>document.querySelector(“输出”).innerHTML=JSON.stringify(数据,null,2);
渲染数据(结果)代码>
我发现很难想象输出数据的外观。您能否修改食品示例以适合您的数据?什么是“类别”和“系列名称”
namesarray.push(temp4);
uniq = [...new Set(namesarray)];