我们有以下initialDataSet
0: {ID: 1, Province/State: "", Country/Region: "Thailand", Lat: 15, Long: 101, …}
1: {ID: 2, Province/State: "", Country/Region: "Japan", Lat: 36, Long: 138, …}
2: {ID: 3, Province/State: "", Country/Region: "Singapore", Lat: 1.2833, Long: 103.8333, …}
...
在他们每个人里面我们有:
0:
ID: 1
Province/State: ""
Country/Region: "Thailand"
Lat: 15
Long: 101
data: (62) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {
在每个data:
内部,我们有:
data: Array(62)
0: {date: "1/22/20", Confirmed: 2, Deaths: 0, Recovered: 0}
1: {date: "1/23/20", Confirmed: 3, Deaths: 0, Recovered: 0}
2: {date: "1/24/20", Confirmed: 5, Deaths: 0, Recovered: 0}
我们需要获取total sum of Deaths
我们做到了:
const initialDataSet = [
{ID: 1, "Province/State": "", "Country/Region": "Thailand", Lat: 15, Long: 101, data : [ {date: "1/22/20", Confirmed: 2, Deaths: 0, Recovered: 0},
{date: "1/23/20", Confirmed: 3, Deaths: 0, Recovered: 0},
{date: "1/24/20", Confirmed: 5, Deaths: 0, Recovered: 0}
]},
{ID: 2, "Province/State": "", "Country/Region": "Japan", Lat: 36, Long: 138, data : [ {date: "1/22/20", Confirmed: 2, Deaths: 0, Recovered: 0},
{date: "1/23/20", Confirmed: 3, Deaths: 0, Recovered: 0},
{date: "1/24/20", Confirmed: 5, Deaths: 0, Recovered: 0}
]},
{ID: 3, "Province/State": "", "Country/Region": "Singapore", Lat: 1.2833, Long: 103.8333, data: [ {date: "1/22/20", Confirmed: 2, Deaths: 0, Recovered: 0},
{date: "1/23/20", Confirmed: 3, Deaths: 0, Recovered: 0},
{date: "1/24/20", Confirmed: 5, Deaths: 0, Recovered: 0}
]}
];
var testTotals = [];
for (var d = 0; d < initialDataSet.length; d++) {
var trackObj = initialDataSet[d];
for (var c = 0; c < trackObj.data.length; c++) {
testTotals.push(parseInt(trackObj.data[c].Deaths));
}
}
var myTots = testTotals.reduce((a, b) => a + b, 0);
console.log(myTots);
但是控制台会提供NaN
答案 0 :(得分:2)
鉴于您正在使用的(大)data set,可以提取以下额外信息:
data
数组的最后一个值是该时间点的总数;这减少了一个内循环data
数组的最后一个值是一个空字符串,则前面没有正整数,这意味着您可以使用|| 0
来强制该值我已经调整了您的数据集以突出显示这些发现,并相应地更改了解决方案。
const initialDataSet = [
{ID: 1, "Province/State": "", "Country/Region": "Thailand", Lat: 15, Long: 101, data : [ {date: "1/22/20", Confirmed: 2, Deaths: 0, Recovered: 0},
{date: "1/23/20", Confirmed: 3, Deaths: 0, Recovered: 0},
{date: "1/24/20", Confirmed: 5, Deaths: '', Recovered: 0}
]},
{ID: 2, "Province/State": "", "Country/Region": "Japan", Lat: 36, Long: 138, data : [ {date: "1/22/20", Confirmed: 2, Deaths: 0, Recovered: 0},
{date: "1/23/20", Confirmed: 3, Deaths: 2, Recovered: 0},
{date: "1/24/20", Confirmed: 5, Deaths: 3, Recovered: 0}
]},
{ID: 3, "Province/State": "", "Country/Region": "Singapore", Lat: 1.2833, Long: 103.8333, data: [ {date: "1/22/20", Confirmed: 2, Deaths: 0, Recovered: 0},
{date: "1/23/20", Confirmed: 3, Deaths: 0, Recovered: 0},
{date: "1/24/20", Confirmed: 5, Deaths: '', Recovered: 0}
]}
];
const x = initialDataSet.reduce((total, {data}) => {
const lastItem = data[data.length - 1]
// it's unlikely, but possible that `data` is an empty array
return lastItem ? total + (lastItem.Deaths || 0) : total
}, 0)
console.log(x);
答案 1 :(得分:1)
数据看起来像是增量数据,因此您只需要对最后的数据求和。
您可以使用reduce
来做到这一点。
要处理 NaN ,可以使用~~
(非双二进制)将值强制转换为整数。
const initialDataSet = [
{ID: 1, "Province/State": "", "Country/Region": "Thailand", Lat: 15, Long: 101, data : [
{date: "1/22/20", Confirmed: 2, Deaths: 0, Recovered: 0},
{date: "1/23/20", Confirmed: 3, Deaths: "", Recovered: 0},
{date: "1/24/20", Confirmed: 5, Deaths: 0, Recovered: 0}
]},
{ID: 2, "Province/State": "", "Country/Region": "Japan", Lat: 36, Long: 138, data : [
{date: "1/22/20", Confirmed: 2, Deaths: 'none', Recovered: 0},
{date: "1/23/20", Confirmed: 3, Deaths: "0", Recovered: 0},
{date: "1/24/20", Confirmed: 5, Recovered: 0}
]},
{ID: 3, "Province/State": "", "Country/Region": "Singapore", Lat: 1.2833, Long: 103.8333, data: [
{date: "1/22/20", Confirmed: 2, Deaths: 0, Recovered: 0},
{date: "1/23/20", Confirmed: 3, Deaths: 1, Recovered: 0},
{date: "1/24/20", Confirmed: 5, Deaths: "2", Recovered: 0}
]}
];
var deathsTotals = initialDataSet.reduce((t, {data}) => t + ~~data[data.length-1].Deaths, 0);
console.log(deathsTotals)
答案 2 :(得分:1)
在循环中添加一个简单的测试:
var testTotals = [];
for (var d = 0; d < initialDataSet.length; d++) {
var trackObj = initialDataSet[d];
for (var c = 0; c < trackObj.data.length; c++) {
testTotals.push(parseInt(trackObj.data[c].Deaths || 0));
}
}
var myTots = testTotals.reduce((a, b) => a + b, 0);
console.log(myTots);
请注意,除非出于其他原因需要将各个值作为数组使用,否则可以在初始迭代中进行所有数学运算。
您可以做的另一件事是将值显式转换为数字,然后仅在不是NaN
的情况下添加值:
var testTotals = [];
for (var d = 0; d < initialDataSet.length; d++) {
var trackObj = initialDataSet[d];
for (var c = 0; c < trackObj.data.length; c++) {
let value = +trackObj.data[c].Deaths;
if (!isNaN(value))
testTotals.push(value);
}
}
var myTots = testTotals.reduce((a, b) => a + b, 0);
console.log(myTots);
这还将处理带有Deaths: "N/A"
或其他非数字,非空字符串的条目。
答案 3 :(得分:1)
您可以使用嵌套方法进行缩减。
const
initialDataSet = [{ ID: 1, "Province/State": "", "Country/Region": "Thailand", Lat: 15, Long: 101, data: [{ date: "1/22/20", Confirmed: 2, Deaths: '', Recovered: 0 }, { date: "1/23/20", Confirmed: 3, Deaths: 2, Recovered: 0 }, { date: "1/24/20", Confirmed: 5, Deaths: 3, Recovered: 0 }] }, { ID: 2, "Province/State": "", "Country/Region": "Japan", Lat: 36, Long: 138, data: [{ date: "1/22/20", Confirmed: 2, Deaths: 2, Recovered: 0 }, { date: "1/23/20", Confirmed: 3, Deaths: 4, Recovered: 0 }, { date: "1/24/20", Confirmed: 5, Deaths: 5, Recovered: 0 }] }, { ID: 3, "Province/State": "", "Country/Region": "Singapore", Lat: 1.2833, Long: 103.8333, data: [{ date: "1/22/20", Confirmed: 2, Deaths: 1, Recovered: 0 }, { date: "1/23/20", Confirmed: 3, Deaths: 2, Recovered: 0 }, { date: "1/24/20", Confirmed: 5, Deaths: 3, Recovered: 0 }] }]
total = initialDataSet.reduce((sum, { data }) =>
data.reduce((s, { Deaths }) => s + (Deaths || 0), sum), 0);
console.log(total);