UNPKG

can

Version:

MIT-licensed, client-side, JavaScript framework that makes building rich web applications easy.

213 lines (166 loc) 4.08 kB
/* --- name: Object description: Object generic methods license: MIT-style license. requires: Type provides: [Object, Hash] ... */ (function(){ var hasOwnProperty = Object.prototype.hasOwnProperty; Object.extend({ subset: function(object, keys){ var results = {}; for (var i = 0, l = keys.length; i < l; i++){ var k = keys[i]; if (k in object) results[k] = object[k]; } return results; }, map: function(object, fn, bind){ var results = {}; var keys = Object.keys(object); for (var i = 0; i < keys.length; i++){ var key = keys[i]; results[key] = fn.call(bind, object[key], key, object); } return results; }, filter: function(object, fn, bind){ var results = {}; var keys = Object.keys(object); for (var i = 0; i < keys.length; i++){ var key = keys[i], value = object[key]; if (fn.call(bind, value, key, object)) results[key] = value; } return results; }, every: function(object, fn, bind){ var keys = Object.keys(object); for (var i = 0; i < keys.length; i++){ var key = keys[i]; if (!fn.call(bind, object[key], key)) return false; } return true; }, some: function(object, fn, bind){ var keys = Object.keys(object); for (var i = 0; i < keys.length; i++){ var key = keys[i]; if (fn.call(bind, object[key], key)) return true; } return false; }, values: function(object){ var values = []; var keys = Object.keys(object); for (var i = 0; i < keys.length; i++){ var k = keys[i]; values.push(object[k]); } return values; }, getLength: function(object){ return Object.keys(object).length; }, keyOf: function(object, value){ var keys = Object.keys(object); for (var i = 0; i < keys.length; i++){ var key = keys[i]; if (object[key] === value) return key; } return null; }, contains: function(object, value){ return Object.keyOf(object, value) != null; }, toQueryString: function(object, base){ var queryString = []; Object.each(object, function(value, key){ if (base) key = base + '[' + key + ']'; var result; switch (typeOf(value)){ case 'object': result = Object.toQueryString(value, key); break; case 'array': var qs = {}; value.each(function(val, i){ qs[i] = val; }); result = Object.toQueryString(qs, key); break; default: result = key + '=' + encodeURIComponent(value); } if (value != null) queryString.push(result); }); return queryString.join('&'); } }); })(); //<1.2compat> Hash.implement({ has: Object.prototype.hasOwnProperty, keyOf: function(value){ return Object.keyOf(this, value); }, hasValue: function(value){ return Object.contains(this, value); }, extend: function(properties){ Hash.each(properties || {}, function(value, key){ Hash.set(this, key, value); }, this); return this; }, combine: function(properties){ Hash.each(properties || {}, function(value, key){ Hash.include(this, key, value); }, this); return this; }, erase: function(key){ if (this.hasOwnProperty(key)) delete this[key]; return this; }, get: function(key){ return (this.hasOwnProperty(key)) ? this[key] : null; }, set: function(key, value){ if (!this[key] || this.hasOwnProperty(key)) this[key] = value; return this; }, empty: function(){ Hash.each(this, function(value, key){ delete this[key]; }, this); return this; }, include: function(key, value){ if (this[key] == null) this[key] = value; return this; }, map: function(fn, bind){ return new Hash(Object.map(this, fn, bind)); }, filter: function(fn, bind){ return new Hash(Object.filter(this, fn, bind)); }, every: function(fn, bind){ return Object.every(this, fn, bind); }, some: function(fn, bind){ return Object.some(this, fn, bind); }, getKeys: function(){ return Object.keys(this); }, getValues: function(){ return Object.values(this); }, toQueryString: function(base){ return Object.toQueryString(this, base); } }); Hash.extend = Object.append; Hash.alias({indexOf: 'keyOf', contains: 'hasValue'}); //</1.2compat>