私はある種のルートプランナーに取り組んでいます。私は実際に "すすぎとリピート"の事件である計算で特に書いた繰り返しコードの量に満足していません。誰かが私におそらくこのコードを減らす方法を提案できるかどうか疑問に思っていましたか?ループを使用してjQueryコードを減らすことはできますか?
現時点では$.each
を使用して入力フィールドから値を取得し、object
に保存します。この後、私は定義された各オブジェクトに個別にアクセスして計算と作業を行います。私はおそらくこれを少し強化したと思う!
データを収集する入力フィールドが格納されている単純なHTMLを見てみましょう。
<div id="plot1" class="plotrow">
<div class="lat">
<input id="plot1_lat" />
</div>
<div class="lon">
<input id="plot1_long" />
</div>
</div>
<div id="plot2" class="plotrow">
<div class="lat">
<input id="plot2_lat" />
</div>
<div class="lon">
<input id="plot2_long" />
</div>
</div>
...
いいえ、この段階で、私は任意の値(緯度と経度の座標になります)を取得するためにjQueryに移動します。私はこの情報をオブジェクトに格納します。
//Object is defined
var obj = {};
//Values are passed in
$('.plotrow').each(function() {
obj[this.id] = {
lat: $(this).find('.lat input').val(),
lon: $(this).find('.lon input').val()
};
});
この段階では、収集した情報に作業を開始する必要があります。ここでは、値をラジアンに変換する関数に値を渡します。
plot1LatRad = deg2rad(obj.plot1.lat);
plot1LonRad = deg2rad(obj.plot1.lon);
plot2LatRad = deg2rad(obj.plot2.lat);
plot2LonRad = deg2rad(obj.plot2.lon);
plot3LatRad = deg2rad(obj.plot3.lat);
plot3LonRad = deg2rad(obj.plot3.lon);
ご覧のとおり、それぞれのプロット値に個別にアクセスしています。次に起こることは、私は場所の違いを調べます。
//Location A
var AtoBLat = plot2LatRad - plot1LatRad;
var AtoBLon = plot2LonRad - plot1LonRad;
AtoBSum = Math.pow(Math.sin(AtoBLat/2), 2) + Math.cos(plot1LatRad) * Math.cos(plot2LatRad) * Math.pow(Math.sin(AtoBLon/2), 2);
AtoBSqrt = 2 * Math.atan2(Math.sqrt(AtoBSum), Math.sqrt(1 - AtoBSum));
AtoBMiles = AtoBSqrt * Rm;
AtoBRound = round(AtoBMiles);
miles1 = AtoBRound * 0.86898;
//Location B
var BtoCLat = plot3LatRad - plot2LatRad;
var BtoCLon = plot3LonRad - plot2LonRad;
BtoCSum = Math.pow(Math.sin(BtoCLat/2), 2) + Math.cos(plot2LatRad) * Math.cos(plot3LatRad) * Math.pow(Math.sin(BtoCLon/2), 2);
BtoCSqrt = 2 * Math.atan2(Math.sqrt(BtoCSum), Math.sqrt(1 - BtoCSum));
BtoCMiles = BtoCSqrt * Rm;
BtoCRound = round(BtoCMiles);
miles2 = BtoCRound * 0.86898;
ご覧のとおり、非常に反復性があり、非常に膨らんでいます。この作業をループで行うことはできますか?誰も助けてくれるアプローチを提案できますか?簡潔さのために私は2つのポイントを示しただけですが、このアプリケーションには10個のエリアがあり、ルートをプロットできるので、上記のコードはかなり大きくなります。
あなたのコードは、完了した作品、そしてちょうど改善を必要とする場合、それはコードレビューにする必要があります代わりに。これは主に、壊れたコードを修正するためのサイトです。 – Carcigenicate
'class location'を作成しようとしましたか? – VTodorov
あなたの最後の場所は何ですか? CtoARoundをやりますか?また、あなたがそれらを計算したら、あなたはその値で何をしますか? – Pete