| /** | |
| * HOP ref. | |
| */ | |
| var has = Object.prototype.hasOwnProperty; | |
| /** | |
| * Return own keys in `obj`. | |
| * | |
| * @param {Object} obj | |
| * @return {Array} | |
| * @api public | |
| */ | |
| exports.keys = Object.keys || function(obj){ | |
| var keys = []; | |
| for (var key in obj) { | |
| if (has.call(obj, key)) { | |
| keys.push(key); | |
| } | |
| } | |
| return keys; | |
| }; | |
| /** | |
| * Return own values in `obj`. | |
| * | |
| * @param {Object} obj | |
| * @return {Array} | |
| * @api public | |
| */ | |
| exports.values = function(obj){ | |
| var vals = []; | |
| for (var key in obj) { | |
| if (has.call(obj, key)) { | |
| vals.push(obj[key]); | |
| } | |
| } | |
| return vals; | |
| }; | |
| /** | |
| * Merge `b` into `a`. | |
| * | |
| * @param {Object} a | |
| * @param {Object} b | |
| * @return {Object} a | |
| * @api public | |
| */ | |
| exports.merge = function(a, b){ | |
| for (var key in b) { | |
| if (has.call(b, key)) { | |
| a[key] = b[key]; | |
| } | |
| } | |
| return a; | |
| }; | |
| /** | |
| * Return length of `obj`. | |
| * | |
| * @param {Object} obj | |
| * @return {Number} | |
| * @api public | |
| */ | |
| exports.length = function(obj){ | |
| return exports.keys(obj).length; | |
| }; | |
| /** | |
| * Check if `obj` is empty. | |
| * | |
| * @param {Object} obj | |
| * @return {Boolean} | |
| * @api public | |
| */ | |
| exports.isEmpty = function(obj){ | |
| return 0 == exports.length(obj); | |
| }; |