Javascript 数组Reduce为数据提供未定义的结果
我试图根据名称的唯一值来累积JSON值。但我一直得到未定义的数据 我的JSON:Javascript 数组Reduce为数据提供未定义的结果,javascript,arrays,json,highcharts,axios,Javascript,Arrays,Json,Highcharts,Axios,我试图根据名称的唯一值来累积JSON值。但我一直得到未定义的数据 我的JSON: [ { "date": "2019-09-16", "browser": "Firefox", "hello": 487586, "bye": 398217 }, { "date": "2019-09-16", "browser": "Firefox", "hello": 2661
[
{
"date": "2019-09-16",
"browser": "Firefox",
"hello": 487586,
"bye": 398217
},
{
"date": "2019-09-16",
"browser": "Firefox",
"hello": 2661089,
"bye": 2111027
},
{
"date": "2019-09-16",
"browser": "Chrome",
"hello": 218492,
"bye": 164685
},
{
"date": "2019-09-16",
"browser": "IE",
"hello": 164572,
"bye": 86309
},
{
"date": "2019-09-16",
"browser": "Chrome",
"hello": 67534,
"bye": 19736
}
]
我的代码:
let json = `json_url`;
let Social_Media = ['Facebook', 'Instagram', 'Twitter', 'LinkedIn', 'TikTok'];
axios.get(json, {
cancelToken: new CancelToken(function executor(c) {
api_requests.json_count = c;
})
})
.then(function(json_counts) {
let json_chart_data = json_counts.data;
let val = [...new Set(json_chart_data.map(({
nm
}) => nm))];
console.log(val);
series = val.reduce((a, c, i) => {
console.log(a);
cur_data = json_chart_data.filter(d => {
return d.nm === c
}).sort(compare_values('date'));
return [...a, {
name: c.replace(/_/g, ' '),
data: cur_data.reduce((aa, cc) => {
// console.log(aa);
return [...aa, {
x: +date(cc),
y: +cc.hello,
bye: +cc.bye
}];
}, []),
Social: Social_Media[i]
}];
}, []);
val
返回[“Firefox”、“Chrome”、“IE”]
我希望console.log(a)
返回:
[]
[0:{data:[json_data for Firefox]}, name:"Firefox", Social_Media:"Facebook"}]
[0:{data:[json_data for Firefox]}, name:"Firefox", Social_Media:"Facebook"}, 1:{data:[json_data for Chrome]}, name:"Chrome", Social_Media:"Instagram"}]
...
我得到:
[]
[0:{data:undefined}, name:"Firefox", Social_Media:"Facebook"}]
[0:{data:undefined}, name:"Firefox", Social_Media:"Facebook"}, 1:{data:undefined}, name:"Chrome", Social_Media:"Instagram"}]
我做错了什么?我只想合并每种浏览器的所有结果。是因为我正在寻找独特的浏览器,然后使用reduce方法将它们组合起来吗 你从不在
reduce
内做任何事情。不知怎的,你们得到的结果表明并非如此。@VLAZ,我已经编辑了我的代码。我感觉你们在这里省略了一些细节。我在这段代码中看到的任何东西都不允许数据
被分配未定义
。不过,您可能在混合对象和数组时做了一些奇怪的事情。什么是a
?它是数组还是对象?您正在控制台记录a.data
,但随后将a
分散到一个数组中。@Jacob,我唯一忽略的是图表的构建。这超出了reduce方法。那是我的错。console.log(a)是我上面期望的结果,我认为它应该是val.filter(d=>{return d===c
或更简单的val.filter(d=>d==c)
,即使有这个问题,您的数据也应该是[]
而不是未定义的。