| 
  • If you are citizen of an European Union member nation, you may not use this service unless you are at least 16 years old.

  • You already know Dokkio is an AI-powered assistant to organize & manage your digital files & messages. Very soon, Dokkio will support Outlook as well as One Drive. Check it out today!

View
 

Javascript Code Snippets

Page history last edited by Corey Alix 13 years, 5 months ago

Unit of Measure Conversion (Javascript)

 

Usage Examples

    var km = 1;

    var mi = km * Number.units["mi/km"];

    var m = Number.converter.convert(mi, "mi", "m");

    var ft = Number.converter.convert(m, "ft/m");

    m = Number.converter.convert(ft, "ft", "m");

    ft = m / Number.converter.convert("m/ft");

    km = ft * Number.units["km/ft"];

    nm = Number.converter.convert(km, "km", "nm");

    alert("${km} km = ${nm} nm".substitute({ km: km, nm: nm }));

 

Implementation

     // assumes b=0 in y=mx+b

    core = {};

    core.mixin = function (dst, src) { if (src) for (var i in src) dst[i] = src[i]; return dst; }

 

    function UnitConverter(meter) {

        var feetPerMeter = 3.2808399, feetPerMile = 5280;

        this.meter = core.mixin({ km: 1000, mi: feetPerMile / feetPerMeter, ft: 1 / feetPerMeter, m: 1 }, meter);

        var t = [], i = 0;

        for (t[i++] in this.meter);

        this.table = [];

        for (i = 0; i < t.length; i++)

            for (j = 0; j < t.length; j++) {

                var key1 = t[i], key2 = t[(i + j + 1) % t.length];

                this.table[key1 + "/" + key2] = this.meter[key2] / this.meter[key1];

            }

    };

 

Extras

    with (UnitConverter) {

        prototype = new Object(); 

        prototype.convert = function () {

            switch (arguments.length) {

                case 1: return this.table[arguments[0]];

                case 2: return arguments[0] * this.table[arguments[1]];

                case 3: return arguments[0] * this.meter[arguments[1]] / this.meter[arguments[2]];

            }

            return Number.NaN;

        } 

    }

 

    Number.converter = new UnitConverter({ nm: 1852 }); // extent to include nautical miles

    Number.units = Number.converter.table;

 

    String.prototype.substitute = function (values) {

        var result = this;

        for (var v in values) result = result.replace("${" + v + "}", values[v]);

        return result;

    }

 

Summary

UnitConverter builds a lookup table containing the following data:

km/mi: 1.6093439975537968

km/ft: 0.000304799999536704

km/m: 0.001

km/nm: 1.852

km/km: 1

mi/ft: 0.00018939393939393942

mi/m: 0.0006213711931818182

mi/nm: 1.1507794497727275

mi/km: 0.6213711931818182

mi/mi: 1

ft/m: 3.2808399

ft/nm: 6076.1154948

ft/km: 3280.8399

ft/mi: 5279.999999999999

ft/ft: 1

m/nm: 1852

m/km: 1000

m/mi: 1609.343997553797

m/ft: 0.304799999536704

m/m: 1

nm/km: 0.5399568034557235

nm/mi: 0.8689762405798039

nm/ft: 0.0001645788334431447

nm/m: 0.0005399568034557236

nm/nm: 1

 

 

Comments (1)

Corey Alix said

at 11:36 am on Dec 27, 2010

(function () {
var feetPerMeter = 3.2808399, feetPerMile = 5280, pixelsPerInch = 96;
var units = { m: 1, km: 0.001, mi: feetPerMeter / feetPerMile, ft: feetPerMeter, "in": 12 * feetPerMeter, px: pixelsPerInch * 12 * feetPerMeter };
Math.convert = function (v1, uom1, uom2) { return v1 * units[uom2] / units[uom1]; }
})();

You don't have permission to comment on this page.