Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有一种方法可以消除javascript数组的重复并合并数据值?_Javascript_Jquery_Arrays - Fatal编程技术网

是否有一种方法可以消除javascript数组的重复并合并数据值?

是否有一种方法可以消除javascript数组的重复并合并数据值?,javascript,jquery,arrays,Javascript,Jquery,Arrays,我正在使用ajax请求获取一些XML数据,然后需要将这些数据放入fusioncharts中的图表中 XML数据的格式为[花费的时间],[完成的工作],[为哪个团队完成],[谁做的](见下文) 我正在迭代XML,然后使用下面的代码构建数组: //Time Recorded if (columnidchecker == 7781) { timearray.push($j(this).find('displayD

我正在使用ajax请求获取一些XML数据,然后需要将这些数据放入fusioncharts中的图表中

XML数据的格式为[花费的时间],[完成的工作],[为哪个团队完成],[谁做的](见下文)

我正在迭代XML,然后使用下面的代码构建数组:

 //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)];

但从那以后,事情就变得相当复杂了

也许这会对你有所帮助。它可能不是你想要的形式,但它展示了如何将问题分解成更小的部分

伪代码:

  • 获取唯一的名称
  • 获取唯一的“任务”名称(因为缺少 (更好的词)
  • 对于每个唯一的人名:

    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);
    渲染数据(结果)
    
    也许这会对你有所帮助。它可能不是你想要的形式,但它展示了如何将问题分解成更小的部分

    伪代码:

  • 获取唯一的名称
  • 获取唯一的“任务”名称(因为缺少 (更好的词)
  • 对于每个唯一的人名:

    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)];