2

現在取り組んでいる変換プログラムの変換係数を格納するために使用されている配列があります。

短い例:

var Length =
{
"lengthsA" :
{
    "inch" : 0.0254,
    "yard" : 0.9144,
    "mile" : 1609.344,
    "foot" : 0.3048,
    "metres": 1
}}

これはさらに大きくなり、さらに多くのものがあります。

私には2つの選択肢があるようです。変換の種類ごとに 1 つずつ、関数を使用して多くの配列を宣言できます。別の方法は、すべてを格納する 1 つの巨大な配列を使用することです。これにより、if else の必要性がなくなり、多くの配列を宣言する必要もなくなりますが、すべてを組み合わせて 1 つの大きな混乱になる可能性があります。

主にモジュール性が好きで、デバッグ/編集が簡単になるため、最初のオプションに賛成です。

速度やアクセス時間も気になります。1 つの大きな配列では、どの値が呼び出されるかを決定するためにキーを使用しているため、影響があります。上記のキーは「lengthsA」になります

ありがとう。

4

3 に答える 3

2

もし私がこのプロジェクトをやっていたら、間違いなく階層構造を使うでしょう。私はこのようなものから始めるかもしれません:

var conversions = {
    length : {
        lengthsA : {
            inch : 0.0254,
            yard : 0.9144,
            mile : 1609.344,
            foot : 0.3048,
            metres: 1
        },
        lengthsB : {
            . . .
        }
    },
    mass : {
    },
    . . .
}

構造は次のとおりconversions.<category>.<conversion_group>.<unit_name>です。おそらく、他の構造と同じくらい簡単に維持できます。

reference参照すべき単位の名前を示すプロパティを追加することを検討してください (例:reference : "metres"の場合lengthsA)。単位の名前についても、より一貫性を持たせたいと思います (「インチ」は単数形で、「メートル」は複数形です)。アプリケーションによっては、各変換を値と不確実性を持つ構造にしたい場合もあります。(変換係数には正確なものもあれば、そうでないものもあります。)

于 2013-07-10T16:44:55.400 に答える
1

プログラムのすべての詳細を知らずに言うのは難しいですが、ユニットを格納するために階層オブジェクトを使用するのではなく、SQL テーブルに似たフラットな配列を使用します。

units = [
    { category: "length", name: "inch" , value: 0.0254   },
    { category: "length", name: "yard" , value: 0.9144   },
    { category: "length", name: "mile" , value: 1609.344 },
    { category: "length", name: "foot" , value: 0.3048   },
    { category: "length", name: "meter", value: 1        }
]

このテーブル内の項目を検索するには、いくつかのユーティリティ関数 ( などgetUnitsByCategory) が必要ですが、一度取得すると、この構造を操作するのがはるかに簡単になることがわかります。均一性は王様です!

于 2013-07-10T16:27:26.940 に答える
0

JavaScriptの変数を定義すると..

var inch=0.0254,
yard=0.9144

あなたは書ける

<option>inch</option>

そしてそれにアクセスします

window[document.select.textContent]

はるかに高速ですが、コードははるかに長くなります。

あなたの場合、読みやすさがより重要です

はい、多次元オブジェクトを作成します。(グループ)

また、値にアクセスするのも簡単です。

obj={
 "length":{
  inches:0.0254,
  miles:1609.344,
 },
 "weight":{
  kg:1  
 }
}

でアクセスできます

obj.length.inches

また

 obj['length']['inches']

そして書く

window.onload=function(){
var obj={
 length:{
  inches:0.0254,
  miles:1609.344,
 }
}
var select1=document.createElement('select'),
select2=null,
f=document.createDocumentFragment(),
input=document.createElement('input'),
convert=document.createElement('button');
for(var a in obj.length){
 f.appendChild(document.createElement('option')).textContent=a;// easyway to access
}
select1.appendChild(f);
select2=select1.cloneNode(true);
input.type='text';
convert.textContent='Convert';

convert.addEventListener('click',function(e){
 console.log(
  input.value,
  obj.length[select1.textContent],// easyway to access
  obj.length[select2.textContent]// easyway to access
)
},false);

var bdy=document.body
bdy.appendChild(input);
bdy.appendChild(select1);
bdy.appendChild(select2);
bdy.appendChild(convert);
}
于 2013-07-10T16:19:28.597 に答える