【发布时间】:2021-07-05 19:13:09
【问题描述】:
我正在使用 d3.js 读取 csv shark.csv,但我遇到了嵌套 for 循环的问题。 csv 包含按大陆和年份划分的有关鲨鱼袭击的数据。所以我想存储每个大陆每年出现的次数。这是shark.csv的截图:
(这些是随机数)
我将每个大陆名称在特定年份中显示的次数存储在字典中,并按如下方式递增:
var allYears = [];
var allConti = [];
var allOccur = {};
d3.csv("https://raw.githubusercontent.com/eliasdon/proj/main/shark.csv").then(function(data) {
// get all unique years
for (var i = 0; i < data.length; ++i) {
if (!allYears.includes(data[i].Date)) {
allYears.push(data[i].Date);
}
}
// get all unique Continents
for (var i = 0; i < data.length; ++i) {
if (!allConti.includes(data[i].Continent)) {
allConti.push(data[i].Continent);
}
}
for (var i = 0; i < data.length; ++i) {
for (var j = 0; j < allYears.length; ++j) {
for (var k = 0; k < allConti.length; ++k) {
// if key for match between year and continent is not stored yet
if (!(allYears[j] + " " + allConti[k] in allOccur)) {
//store it with value of 1
allOccur[allYears[j] + " " + allConti[k]] = 1;
} else {
//if already stored increment it
allOccur[allYears[j] + " " + allConti[k]] = ++allOccur[allYears[j] + " " + allConti[k]];
}
}
}
}
console.log(allOccur);
});
这基本上就是代码的作用:
1- 读取 csv
2- 存储所有独特的年份
3- 存储所有独特的大陆
4- 如果没有名为allYears[j] + " " + allConti[k](年份和大陆)的键,则添加它并赋予其值 1。
5- 如果它已经存在,则将其值增加 1
问题是所有年份和大陆键的值都是 csv 中的总行数。
我的 for 循环有什么问题?
【问题讨论】:
标签: javascript csv dictionary for-loop d3.js