Arquivos
AjaxIM/server/libs/utils.js
T

61 linhas
1.7 KiB
JavaScript

// Many functions borrowed from
// ext.js - Copyright TJ Holowaychuk <tj@vision-media.ca> (MIT Licensed)
module.exports = o_ = {
merge: function(a, b) {
if(!b) return a;
var keys = Object.keys(b);
for(var i = 0, len = keys.length; i < len; i++)
a[keys[i]] = b[keys[i]];
return a;
},
extend: function() {
var o = {};
for (var a=0; a < arguments.length; ++a) {
this.merge(o, arguments[a]);
}
return o;
},
deletekey: function(o, key) {
if (o.hasOwnProperty(key)) {
delete o[key];
}
return o;
},
values: function(obj) {
if(typeof obj == 'array')
return obj;
if(!obj || typeof obj !== 'object')
return [];
var keys = Object.keys(obj),
vals = [];
for(var i = 0, len = keys.length; i < len; ++i)
vals.push(obj[keys[i]]);
return vals;
},
find: function(arr, fn, context) {
if(typeof arr == 'array') {
for(var i = 0, len = arr.length; i < len; ++i)
if(fn.call(context, arr[i], i, arr))
return arr[i];
} else if(typeof arr == 'object') {
var keys = Object.keys(obj);
for(var i = 0, len = keys.length; i < len; ++i)
if(fn.call(context, arr[keys[i]], keys[i], arr))
return [arr[keys[i]], keys[i]];
}
},
bind: function(fn, context) {
var self = fn,
args = Array.prototype.slice.call(arguments, 2);
return function() {
var _args = Array.prototype.slice.call(arguments);
return fn.apply(context, args.concat(_args));
};
}
};