我对JS和HTML还是很陌生,并且正在使用别人编写的代码,因此我不太了解它。我会尽力提出一个适当的问题。
在HTML中,我有
<select id="temp-option" name="temp-option" value="{{temp-option}}">
<option value="Water">Water temperature</option>
<option value="Air">Air temperature</option>
</select>
然后我用var tempOption = document.getElementById("temp-option");
获取用户在JS中选择的值,并希望使用此值来更改函数中的变量。它应该很简单,但是代码超出了我的理解范围,因此我无法弄清楚如何使我的特定案例起作用。
function plot(){
//Leave out what I think is irrelevant.
let temperatures1 = mapping((f) => {return {time: time_since(f.DateAndTime, startTime), temp: f.WaterTemperature}}, estimation.EstimationData);
let temperatures2 = mapping((f) => {return {time: time_since(f.DateAndTime, startTime), temp: f.WaterTemp}}, tempData);
}
因此,水温存储在两个JSON字符串中(据我了解),并以不同的名称调用,因此我需要根据温度1或温度2发送不同的变量。
我试图用if语句来做到这一点。
if(tempOption.value == "Water"){
tempChoice = ["f.WaterTemperature", "f.WaterTemp"]
}
if(tempOption.value == "Air"){
tempChoice = ["f.AirTemperature", "f.AirTemp"]
}
,然后将温度为“ temp:xxx”的xxx与tempChoice[1]
或tempChoice[2]
交换:
let temperatures1 = mapping((f) => {return {time: time_since(f.DateAndTime, startTime), temp: tempChoice[0]}}, estimation.EstimationData);`
如果需要了解,请点击这里。
function map(f, xs) {
var xs2 = [];
for (var i = 0; i < xs.length; i++) {
xs2.push(f(xs[i]));
}
return xs2;
}
将非常感谢您提供一些有关如何解决此问题的帮助。谢谢!
答案 0 :(得分:0)
您应该执行一些Js教程。因为您在做什么是一些“严重”错误。看看Json和Arrays是如何工作的。
我没有完全理解代码,但是这行不通:
if(tempOption.value == Water){
tempChoice = ["temp: f.WaterTemperature", "temp: f.WaterTemp"]
}
因为您正在创建一个数组,并且此数组包含两个字符串。我非常怀疑,这就是您想要做的。我猜您想在数组中使用JS bject文字。像这样:
tempChoice =[{"temp":f.WaterTemperature},{"temp":f.WaterTemp}]
您还正在将值与非字符串进行比较
if(tempOption.value ==="Water")
应该是您可能想要做的
修改 顺便说一句,如果没有必要,我不会使用此代码。我认为命名真的很糟糕。例如“ f”通常是一个将要调用的函数(作者在函数映射中所做的事情),但是在映射函数内部,“ f”用作包含对象的参数。这使得代码更加难以理解
答案 1 :(得分:0)
不确定有编程经验的人是否会推荐此解决方案。当我较有知识时,可能稍后需要重做。
对我有用的解决方案非常简单,我只需要更改如何调用JS对象即可。最初,我使用objectName.property
,正如您在问题中看到的那样。我在if语句中生成的字符串无法替换“属性”。当您改用objectName["property"]
访问对象的属性时,该属性名称显示为字符串,因此可以轻松地用另一个字符串替换。就我而言,objectName[tempChoice[0]]
和objectName[tempChoice[1]]
。
但是请记住,这可能是一个问题的解决方案,该问题仅是由于开始时的不良编程而引起的。如果您知道另一种解决方案,我想是可以使用该解决方案,请共享。