tsreflect-ioc
Version:
Inversion of control and Dependency injection framework for typescript based on the tsreflect-compiler package.
99 lines (92 loc) • 2.97 kB
JavaScript
var extend = require('extend');
var ArrayExtensions = (function () {
function ArrayExtensions() {
}
ArrayExtensions.prototype.select = function (expr) {
if (expr === undefined)
throw new ReferenceError('Expression for selection needs to get defined');
var resultSet = [];
this.each(function (item, index, self) {
resultSet.push(expr(item, index, self));
return true;
});
return resultSet;
};
ArrayExtensions.prototype.any = function (expr) {
var self = this;
if (expr === undefined) {
return self.length > 0;
}
var fn;
if (typeof expr == 'function') {
fn = expr;
} else {
fn = function (item) {
return item == expr;
};
}
var len = self.length;
for (var i = 0; i < len; i++) {
var current = this[i], result = fn(current, i, self);
if (result == true) {
return true;
}
}
return false;
};
ArrayExtensions.prototype.first = function (expr) {
var res = this.firstOrDefault(expr);
if (res == null)
throw new Error('The collection is empty or your expression does not match, first() cant deliver any entry.');
return res;
};
ArrayExtensions.prototype.firstOrDefault = function (expr) {
var self = this;
if (expr === undefined && self.length > 0) {
return self[0];
} else {
var fn;
if (typeof expr == 'function') {
fn = expr;
} else {
fn = function (item) {
return item == expr;
};
}
var len = self.length;
for (var i = 0; i < len; i++) {
var current = this[i], result = fn(current, i, self);
if (result == true) {
return current;
}
}
}
return null;
};
ArrayExtensions.prototype.each = function (fn) {
var self = this;
var length = self.length;
for (var i = 0; i < length; i++) {
if (fn(self[i], i, self) === false) {
return false;
}
}
return true;
};
ArrayExtensions.prototype.where = function (expr) {
var self = this;
var result = [];
var fn = typeof expr == 'function' ? expr : function (item) {
return item == expr;
};
this.each(function (item, index, _self) {
if (fn(item, index, _self))
result.push(item);
return true;
});
return result;
};
return ArrayExtensions;
})();
;
extend(false, Array.prototype, ArrayExtensions.prototype);