Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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_Arrays_Highcharts - Fatal编程技术网

Javascript减少日期值数组的数组

Javascript减少日期值数组的数组,javascript,arrays,highcharts,Javascript,Arrays,Highcharts,我相信有一个简单的解决办法,但我找不到。我正在将[date,value]数组传递给Highcharts,但我需要添加重复日期的值 我正在寻找一个具有整合结果的新阵列 [{ “名称”:“实际”, “数据”:[ [1396242000000, 592.685], [1396242000000, 377.712], [1404104400000, 316.74], [1404104400000, 596.709], [1412053200000, 579.066], [1412053200000,

我相信有一个简单的解决办法,但我找不到。我正在将[date,value]数组传递给Highcharts,但我需要添加重复日期的值

我正在寻找一个具有整合结果的新阵列

[{
“名称”:“实际”,
“数据”:[
[1396242000000, 592.685],
[1396242000000, 377.712],
[1404104400000, 316.74],
[1404104400000, 596.709],
[1412053200000, 579.066],
[1412053200000, 300.803],
[1420005600000, 596.497],
[1420005600000, 297.004],
[1427778000000, 435.818],
[1427778000000, 287.556],
[1435640400000, 446.788],
[1435640400000, 282.971],
[1443589200000, 270.027],
[1443589200000, 445.239],
[1451541600000, 258.869],
[1451541600000, 432.285],
[1459400400000, 266.438],
[1459400400000, 409.761],
[1467262800000, 408.126],
[1467262800000, 246.83],
[1475211600000, 395.026],
[1475211600000, 233.635]
]
}, {
“名称”:“预测”,
“数据”:[
[1483164000000, 406.329],
[1483164000000, 240.611],
[1490936400000, 414.456],
[1490936400000, 241.814],
[1498798800000, 243.99],
[1498798800000, 422.745],
[1506747600000, 443.882],
[1506747600000, 246.43],
[1514700000000, 466.076],
[1514700000000, 253.823]
]
}]
var-arr=[{
“名称”:“实际”,
“数据”:[
[1396242000000, 592.685],
[1396242000000, 377.712],
[1404104400000, 316.74],
[1404104400000, 596.709],
[1412053200000, 579.066],
[1412053200000, 300.803],
[1420005600000, 596.497],
[1420005600000, 297.004],
[1427778000000, 435.818],
[1427778000000, 287.556],
[1435640400000, 446.788],
[1435640400000, 282.971],
[1443589200000, 270.027],
[1443589200000, 445.239],
[1451541600000, 258.869],
[1451541600000, 432.285],
[1459400400000, 266.438],
[1459400400000, 409.761],
[1467262800000, 408.126],
[1467262800000, 246.83],
[1475211600000, 395.026],
[1475211600000, 233.635]
]
}, {
“名称”:“预测”,
“数据”:[
[1483164000000, 406.329],
[1483164000000, 240.611],
[1490936400000, 414.456],
[1490936400000, 241.814],
[1498798800000, 243.99],
[1498798800000, 422.745],
[1506747600000, 443.882],
[1506747600000, 246.43],
[1514700000000, 466.076],
[1514700000000, 253.823]
]
}];
数组中每个对象o的arr.forEach(函数(o){//
var hash={};//哈希对象,用于在新数组中存储时间索引
o、 data=o.data.reduce(函数(newArr,e){//减少对象o的数据数组
var index=hash[e[0]];//从此时的哈希对象(e[0])获取索引
如果(index==undefined){//如果index是未定义的(这次还没有散列),那么将e添加到数组中并散列其索引,这样它将用于重复
hash[e[0]]=newArr.push(e)-1;//push返回新的长度,因此索引是长度-1
}else{//else(时间已经散列)
newArr[index][1]+=e[1];//然后将此元素的值(e[1])添加到索引处已散列的元素的值中
}
返回newArr;
}, []);
});
控制台日志(arr)请尝试以下操作:

var实际值=[[1396242000000592.685],
[1396242000000, 377.712],
[1404104400000, 316.74],
[1404104400000, 596.709],
[1412053200000, 579.066],
[1412053200000, 300.803],
[1420005600000, 596.497],
[1420005600000, 297.004],
[1427778000000, 435.818],
[1427778000000, 287.556],
[1435640400000, 446.788],
[1435640400000, 282.971],
[1443589200000, 270.027],
[1443589200000, 445.239],
[1451541600000, 258.869],
[1451541600000, 432.285],
[1459400400000, 266.438],
[1459400400000, 409.761],
[1467262800000, 408.126],
[1467262800000, 246.83],
[1475211600000, 395.026],
[1475211600000, 233.635]];
var sum={},结果;
对于(变量i=0,c;c=实际值[i];+i){
如果(未定义===sum[c[0]]){
和[c[0]]=c;
}
否则{
和[c[0]][1]+=c[1];
}
}
结果=Object.keys(sum).map(函数(val){返回和[val]});
警报(JSON.stringify(result))以下是我的做法(假设您能够使用ES6):


你期望的结果是什么?是否要删除重复项?您可以使用重复的数据创建另一个系列。我需要减少结果,以便为每个项目获得这样的结果。。。[1396242000000970.397](592.685+377.72=970.397)这真是太棒了。我没想到要用散列。非常感谢你的帮助。谢谢你的帮助。让我也试试这个。这是非常优雅的解决方案。我要试一试。谢谢。@JohnBest唯一需要注意的是,如果处理大量数据,
find
调用可能会变慢。我假设您使用的数据集不会比您提供的示例大很多。
const data = [
  [1396242000000, 592.685],
  [1396242000000, 377.712],
  [1404104400000, 316.74],
  [1404104400000, 596.709],
  [1412053200000, 579.066],
  [1412053200000, 300.803],
  [1420005600000, 596.497],
  [1420005600000, 297.004],
  [1427778000000, 435.818],
  [1427778000000, 287.556],
  [1435640400000, 446.788],
  [1435640400000, 282.971],
  [1443589200000, 270.027],
  [1443589200000, 445.239],
  [1451541600000, 258.869],
  [1451541600000, 432.285],
  [1459400400000, 266.438],
  [1459400400000, 409.761],
  [1467262800000, 408.126],
  [1467262800000, 246.83],
  [1475211600000, 395.026],
  [1475211600000, 233.635]
];

const forecast = data.reduce((acc, val) => {
  let existingForecast = acc.find(f => f[0] === val[0]);
  existingForecast ? existingForecast[1] += val[1] : acc.push(val);
  return acc;
}, []);

console.log(forecast);