jQuery's each method with a shim to check if passed in value is an array
// jQuery's each method
// https://github.com/jquery/jquery/blob/master/src/core.js#L279
function each(obj, callback, args) {
var value,
i = 0,
length = obj.length,
isArray = isArraylike(obj);
if (args) {
if (isArray) {
for (; i < length; i++) {
value = callback.apply(obj[i], args);
if (value === false) {
break;
}
}
} else {
for (i in obj) {
value = callback.apply(obj[i], args);
if (value === false) {
break;
}
}
}
// A special, fast, case for the most common use of each
} else {
if (isArray) {
for (; i < length; i++) {
value = callback.call(obj[i], i, obj[i]);
if (value === false) {
break;
}
}
} else {
for (i in obj) {
value = callback.call(obj[i], i, obj[i]);
if (value === false) {
break;
}
}
}
}
return obj;
}
// http://stackoverflow.com/a/4775737/907388
function isArraylike(obj) {
if (Object.prototype.toString.call(obj) === '[object Array]') {
return true;
} else {
return false;
}
}