UNPKG

goodies

Version:

Native object extension goodies.

80 lines (72 loc) 1.84 kB
var extend = function(object, methodName, method) { if (!object.prototype[methodName]) { Object.defineProperty(object.prototype, methodName, { enumerable: false, value: method }); } }; extend(Array, "bsearch", function(value, compare) { var arr = this , hi = arr.length - 1 , lo = 0 , pos , dir , compare; compare = compare || function(a, b) { return a - b }; while (lo <= hi) { pos = (hi - lo)/2 + lo; pos = Math.floor(pos); dir = compare(arr[pos], value); if (dir > 0) { hi = pos - 1; } else if (dir < 0) { lo = pos + 1; } else { return pos; } } return -1; }); extend(Array, "unique", function() { for (var i = 1; i < this.length; ++i) { if (this[i] == this[i - 1]) { this.splice(i, 1); --i; } } return this; }); extend(Array, "last", function() { return this[this.length - 1]; }); extend(Object, "join", function(object) { var objectA = object , objectB = this , merged = {} , keysA = Object.keys(objectA) , keysB = Object.keys(objectB) , keys = keysA.concat(keysB).sort().unique() , key; for (var i = 0, l = keys.length; i < l; ++i) { key = keys[i]; if (objectA.hasOwnProperty(key) && objectB.hasOwnProperty(key)) { if (typeof objectA[key] === "object" && typeof objectB[key] === "object") { merged[key] = objectB[key].merge(objectA[key]); } else { merged[key] = objectA[key]; } } else if (objectA.hasOwnProperty(key)) { merged[key] = objectA[key]; } else if (objectB.hasOwnProperty(key)) { merged[key] = objectB[key]; } } return merged; }); extend(Date, "unixTime", function() { return Math.floor(this.getTime()/1000); }); extend(Date, "fromUnixTime", function(time) { this.setTime(time*1000); });