Comparing version
module.exports = reduce | ||
var objectKeys = require('object-keys'); | ||
function reduce(list, iterator, context, accumulator) { | ||
var keys = Object.keys(list) | ||
var keys = objectKeys(list) | ||
, i = 0 | ||
@@ -25,1 +27,2 @@ | ||
} | ||
{ | ||
"name": "reduce", | ||
"version": "0.1.0", | ||
"version": "0.1.2", | ||
"description": "A better [].reduce", | ||
@@ -19,6 +19,7 @@ "keywords": [], | ||
}, | ||
"dependencies": {}, | ||
"dependencies": { | ||
"object-keys": "~0.2.0" | ||
}, | ||
"devDependencies": { | ||
"tap": "~0.3.1", | ||
"sinon": "~1.4.2" | ||
"tape": "~1.0.2" | ||
}, | ||
@@ -31,5 +32,22 @@ "licenses": [ | ||
], | ||
"testling": { | ||
"files": "test/*.js", | ||
"browsers": [ | ||
"iexplore/6.0..latest", | ||
"firefox/3.0..6.0", | ||
"firefox/15.0..latest", | ||
"firefox/nightly", | ||
"chrome/4.0..10.0", | ||
"chrome/20.0..latest", | ||
"chrome/canary", | ||
"opera/10.0..latest", | ||
"opera/next", | ||
"safari/4.0..latest", | ||
"ipad/6.0..latest", | ||
"iphone/6.0..latest" | ||
] | ||
}, | ||
"scripts": { | ||
"test": "tap --stderr --tap ./test" | ||
"test": "node test/simple.js" | ||
} | ||
} |
# reduce [![build status][1]][2] | ||
A better [].reduce | ||
[![browser support][3]][4] | ||
@@ -40,1 +40,4 @@ ## Example | ||
[2]: http://travis-ci.org/Raynos/reduce | ||
[3]: https://ci.testling.com/Raynos/reduce.png | ||
[4]: https://ci.testling.com/Raynos/reduce | ||
@@ -1,3 +0,2 @@ | ||
var test = require("tap").test | ||
, sinon = require("sinon") | ||
var test = require("tape") | ||
, reduce = require("..") | ||
@@ -7,12 +6,27 @@ | ||
var item = createItem() | ||
, iterator = sinon.spy(function (acc, v) { | ||
acc.key += v | ||
, timesCalled = 0 | ||
, accumulator = { key: '' } | ||
, expectedKeys = ['a', 'b', 'c'] | ||
, expectedValues = ['a1', 'b1', 'c1'] | ||
, expectedAccumulatorKeys = ['', 'a1', 'a1b1', 'a1b1c1'] | ||
, iterator = function (acc, value, key, list) { | ||
var expectedKey = expectedKeys[timesCalled] | ||
, expectedValue = expectedValues[timesCalled] | ||
, expectedAccumulatorKey = expectedAccumulatorKeys[timesCalled] | ||
t.equal(value, expectedValue, 'value ' + value + ' does not match ' + expectedValue) | ||
t.equal(key, expectedKey, 'key ' + key + ' does not match ' + expectedKey) | ||
t.equal(list, item, 'list arg is not correct') | ||
t.equal(acc.key, expectedAccumulatorKey, 'accumulator key ' + acc.key + ' does not match ' + expectedAccumulatorKey) | ||
timesCalled += 1 | ||
acc.key += value | ||
return acc | ||
}) | ||
} | ||
var result = reduce(item, iterator, { | ||
key: "" | ||
}) | ||
var result = reduce(item, iterator, accumulator) | ||
t.ok(iterator.calledThrice, "iterator was not called thrice") | ||
t.equal(timesCalled, 3, "iterator was not called thrice") | ||
t.deepEqual(result, { key: 'a1b1c1' }, 'result is incorrect'); | ||
return t.end(); | ||
t.deepEqual(iterator.args[0], [{ | ||
@@ -36,9 +50,9 @@ key: "a1b1c1" | ||
var item = createItem() | ||
, iterator = sinon.spy() | ||
, thisValue = {} | ||
, iterator = function () { | ||
t.equal(this, thisValue, 'this value is incorrect'); | ||
} | ||
reduce(item, iterator, thisValue, {}) | ||
t.ok(iterator.calledOn(thisValue), "this value is incorrect") | ||
t.end() | ||
@@ -49,5 +63,5 @@ }) | ||
var list = [1, 2] | ||
, iterator = sinon.spy(function (sum, v) { | ||
, iterator = function (sum, v) { | ||
return sum + v | ||
}) | ||
} | ||
@@ -61,3 +75,2 @@ var result = reduce(list, iterator) | ||
function createItem() { | ||
@@ -64,0 +77,0 @@ return { |
5882
32.66%1
-50%7
16.67%84
20%43
7.5%1
Infinity%+ Added
+ Added
+ Added
+ Added
+ Added