2
0
mirror of https://github.com/tenrok/axios.git synced 2026-06-11 18:02:32 +03:00

Updating forEach to handle non iterable values

This commit is contained in:
Matt Zabriskie
2014-08-27 14:05:27 -06:00
parent 0c7236b292
commit d49cb34591
7 changed files with 113 additions and 42 deletions
+19 -9
View File
File diff suppressed because one or more lines are too long
+19 -9
View File
File diff suppressed because one or more lines are too long
+19 -9
View File
File diff suppressed because one or more lines are too long
+19 -9
View File
File diff suppressed because one or more lines are too long
+15 -2
View File
@@ -1,5 +1,10 @@
'use strict';
function isArrayLike(obj) {
return obj.constructor === Array || typeof obj.callee === 'function';
}
/**
* Iterate over an Array or an Object invoking a function for each item.
*
@@ -13,12 +18,20 @@
* @param {Function} fn The callback to invoke for each item
*/
module.exports = function forEach(obj, fn) {
if (typeof obj !== 'object') {
// Don't bother if no value provided
if (obj === null || typeof obj === 'undefined') {
return;
}
var isArray = isArrayLike(obj);
// Force an array if not already something iterable
if (typeof obj !== 'object' && !isArray) {
obj = [obj];
}
// Iterate over array values
if (obj.constructor === Array || typeof obj.callee === 'function') {
if (isArray) {
for (var i=0, l=obj.length; i<l; i++) {
fn.call(null, obj[i], i, obj);
}
-4
View File
@@ -11,10 +11,6 @@ var forEach = require('./forEach');
* @returns {*} The resulting transformed data
*/
module.exports = function transformData(data, headers, fns) {
if (typeof fns === 'function') {
return fns(data, headers);
}
forEach(fns, function (fn) {
data = fn(data, headers);
});
+22
View File
@@ -29,5 +29,27 @@ module.exports = {
test.equal(keys, 'bar');
test.equal(vals, 6);
test.done();
},
testUndefined: function (test) {
var count = 0;
forEach(undefined, function () {
count++;
});
test.equals(count, 0);
test.done();
},
testFunction: function (test) {
var count = 0;
forEach(function () {}, function () {
count++;
})
test.equals(count, 1);
test.done();
}
};