coerce to number perf

Benchmark created by Nick bottomley on


Setup

var obj = {
      a: '1',
      b: 2,
      c: 'x',
      d: 'y' 
    };
    
    function withNumber (obj) {
      return Object.keys(obj).reduce(function (result, key) {
        var value = obj[key];
        var num = Number(value);
        if (value !== "" && !isNaN(num)) {
          result[key] = num;
        } else {
          result[key] = value;
        }
        return result;
      }, {});
    }
    
    function withParseInt (obj) {
      return Object.keys(obj).reduce(function (result, key) {
        var value = obj[key];
        var num = parseInt(value);
        if (value !== "" && !isNaN(num)) {
          result[key] = num;
        } else {
          result[key] = value;
        }
        return result;
      }, {});
    }

Test runner

Ready to run.

Testing in
TestOps/sec
number
var r = withNumber(obj);
if (typeof r.a !== "number") { throw new Error(); }
ready
parseint
var r = withParseInt(obj);
if (typeof r.a !== "number") { throw new Error(); }
ready
json
var r = JSON.parse(JSON.stringify(obj));
if (typeof r.a !== "number") { throw new Error(); }
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.

  • Revision 1: published by Nick bottomley on