【发布时间】:2020-10-26 09:47:56
【问题描述】:
我有一个问题,我相信你们很多人都可以解决它,我的目标是将我的输入值与 CSV 列进行比较,稍后,如果比较为真,将跟踪图表。但是我在这部分苦苦挣扎,每次我console.log我的输入值时,它都会说它的undefined。
我确定这是与 Promise 相关的问题,但我找不到有效的解决方案。
function myFunction() {
const selectedFile = document.getElementById("myFile").files[0];
d3.csv(selectedFile.name)
.then(function(players, data) {
var y = document.getElementById("yLabel").value;
var x = document.getElementById("xLabel").value;
document.getElementById("y_one").innerHTML = y;
document.getElementById("x_one").innerHTML = x; // HERE X OR Y ARE DEFINED
console.log("take this value " + x);
const playerLabels = players.map(function(d) {
console.log(x); //HOWEVER IN THIS PART , IT SAYS IS UNDEFINED
return d.x;
});
console.log(playerLabels);
const weekData = players.map(function(d) {
console.log("lol");
return d.Weeks;
});
var chart = new Chart("chart", {
type: "horizontalBar",
options: {
maintainAspectRatio: false,
legend: {
display: false,
},
},
data: {
labels: playerLabels,
datasets: [{
data: weekData,
}, ],
},
});
});
}
<script src="https://d3js.org/d3.v6.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.4/Chart.min.js" integrity="sha512-d9xgZrVZpmmQlfonhQUvTR7lMPtO7NkZMkA0ABN3PHCbKA5nqylQ/yWlFAyY6hYgdF1Qh6nYiuADWwKB4C2WSw==" crossorigin="anonymous"></script>
<p>
Please enter x axis and y axis correctly, else you wouldnt get correct graph
</p>
x labels :
<input type="text" id="xLabel" /> y labels :
<input type="text" id="yLabel" />
<input type="file" id="myFile" multiple size="50" />
<button onclick="myFunction()">Generate graph</button>
<p id="y_one"></p>
<p id="x_one"></p>
<canvas id="chart"></canvas>
【问题讨论】:
-
如果我用任何其他 CSV 文件替换您的文件,我会打印出
x的输入值,因此它可能与您的输入文件有关,或者您没有正确读取输出。我使用了this file,来自一个在线示例 -
它会显示一个值数组,我得到一个未定义值的数组,你得到同样的东西吗?
-
未定义的不是
x,而是d.x。您的 CSV 是否有x列?
标签: javascript d3.js charts promise async-await