bugfix> javascript > 投稿

私は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>

次に、JSで var tempOption = document.getElementById("temp-option"); を使用してユーザーが選択した値を取得しますこれを使用して関数内の変数を変更したい。単純なはずですが、コードは私の理解を少し上回っているので、特定のケースを機能させる方法がわかりません。

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);
}

そのため、水温は2つのJSON文字列に格納され(私の理解から)、異なる名前で呼び出されるため、temperature1またはtemperature2のどちらであるかに応じて異なる変数を送信する必要があります。

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;
}

これを解決する方法についてのいくつかの助けをいただければ幸いです。ありがとうございました!

回答 2 件
  • いくつかのJsチュートリアルを適切に行う必要があります。あなたがしていることはいくつかの「重大な」障害だからです。 JsonとArrayがどのように機能しているかを調べてください。

    私はコードを完全に理解していませんでしたが、これは機能しません:

    if(tempOption.value == Water){
    tempChoice = ["temp: f.WaterTemperature", "temp: f.WaterTemp"]
    }
    
    

    配列を作成しており、この配列には2つの文字列が含まれているためです。そして、私はこれがあなたがしたいことであることを非常に疑います。配列内にJS bjectリテラルが必要だと思います。このようなもの:

    tempChoice =[{"temp":f.WaterTemperature},{"temp":f.WaterTemp}]
    
    

    また、値を非文字列と比較しています

    if(tempOption.value ==="Water")
    
    

    あなたがおそらくやりたいことであるべきです

    編集 ところで、必要でない場合は、このコードを使用しません。ネーミングは本当に悪いと思います。例えば「f」は通常呼び出される関数です(関数マップで作成者が行いました)が、マッピング関数呼び出し内で、「f」はオブジェクトを含むパラメーターとして使用されます。これにより、コードの理解がさらに難しくなります

  • このソリューションがプログラミングの経験がある人に推奨されるかどうかはわかりません。後で知識が豊富になったら、やり直す必要があるかもしれません。

    私のために働いた解決策は信じられないほど簡単で、JSオブジェクトの呼び出し方法を変更する必要がありました。最初は objectName.property を使用しました  あなたが質問で見ることができるように。ここで「プロパティ」を置き換えることは、ifステートメントで生成する文字列では実行できません。代わりに objectName["property"] を使用してオブジェクトのプロパティにアクセスする場合  プロパティ名は文字列として表示されるため、別の文字列に簡単に置き換えることができます。私の場合、 objectName[tempChoice[0]]  & objectName[tempChoice[1]]

    ただし、これはおそらく、最初は不適切なプログラミングが原因でのみ発生する問題の解決策です。別の解決策を知っている場合は、その解決策を使用して、共有してください。

あなたの答え