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

  • Whenever you search in PBworks or on the Web, Dokkio Sidebar (from the makers of PBworks) will run the same search in your Drive, Dropbox, OneDrive, Gmail, Slack, and browsed web pages. Now you can find what you're looking for wherever it lives. Try Dokkio Sidebar for free.

View
 

Javascript Code Snippets

Page history last edited by Corey Alix 12 years, 7 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.