2017-06-21 4 views
1

私は「`120万ミリメートルの価値を持っていると私は自動的にのような最高のプレフィックスに転送する方法持ってwan't:js-量を使って最良の接頭辞に変換するには?

import Qty from 'js-quantities' 

const qty = new Qty(1200000, 'mm').toBest() 
// now set to 1.2, 'km' same as doing to('km') directly 

をこれはとにかく可能ですか?

または、どのようにして、指定ユニットが自分で行うために接頭辞付きのユニットの順序付きリストを得ることができますか?ここで

+1

でこのライブラリについての詳細を参照してください「ベスト」はもちろんの主観ですが、あなたが気に入っ形式を持ってまで、あなたは、1000で毎回分割し、メートル法の接頭辞をステップ実行できます。 – Pickle

+0

ほとんどの場合、 'quantity/1000' <1までの再帰呼び出しが適していますが、ユニットを保持するためにオブジェクトマップを作成する必要があります –

+0

しかし、どのユニットに対しても可能な接頭辞のリストはどのように取得できますか?メーターのようなメーターもcmをサポートしなければならない場合があります。ベストは小さな値> 1です。 – Alinex

答えて

1

は、この上で拡大して、今すぐ

function toBest(num, unit) { 
 
    const map = { 
 
     "mm" : "m", 
 
     "m" : "km", 
 
     "km" : "km" 
 
    }; 
 
    let recurse = false; 
 
    let nextUnit = unit; 
 
    if ((num/1000) >= 1) { 
 
     num = (num/1000); 
 
     nextUnit = map[unit]; 
 
     recurse = true; 
 
    } 
 
    if (recurse) { 
 
     return toBest(num, nextUnit) 
 
    } else { 
 
     return num+" "+unit; 
 
    } 
 
} 
 

 
console.log(toBest(1000, "mm")); 
 
console.log(toBest(10000000, "mm")); 
 
console.log(toBest(47243278423, "m")); 
 
console.log(toBest(1000000, "mm")); 
 
console.log(toBest(999999, "mm")); 
 
console.log(toBest(2, "mm"));

OPTIM

に到達されるまで1000年で除算ユニットマップと再帰的プロセスの小さな一例である、あなたがかもしれないと述べましたcmからm、またはkmからdmにすることもできます。これは、オブジェクトマップがトリッキーになる場所です。あなたは、あなたが望むあらゆる可能な変換のための除数を明示的に定義しなければなりません。

const map = { 
    "mm" : { 
     "to" : "cm", 
     "divisor" : 10 
    }, 
    "km" : { 
     "to" : "dm", 
     "divisor" : .0001 
    }, 
} 

ここで、ループはより多くのif/else checkyを取得しますが、再帰的ロジックは保持する必要があります。

+0

良いスタートとして見えますが、明日チェックアウトする必要があります。 – Alinex

0

私はさらなる調査を行い、別のライブラリが見つかりました。だから私はs-量を変更しましたagainst convert-units`はうまくいくが、サポートされているユニットは少ない(現時点では)。しかし、定義ファイルはより構造化されており、後でそれにいくつかのユニットを追加するかもしれません。

import convert from 'convert-units' 

// to check if unit is supported 
try { 
    convert().from(unit) 
} catch { ... } 

// to convert unit 
const valueInMeter = convert(1200000).from('mm').to('m') 

// and finally the best unit 
const best = convert(1200000).from('mm').toBest() 
// best.val = 1.2 
// best.unit = 'km' 

https://github.com/ben-ng/convert-units

関連する問題