This repository was archived by the owner on Jun 3, 2023. It is now read-only.

Description
var t = require('transducers-js');
t.into({}, t.map(x => x + 1), {foo: 1});
Expected: {foo:2} — Actual: {f: 'o'}
The "issue" is here:
transducers.objectReduce = function(xf, init, obj) {
var acc = init;
for(var p in obj) {
if(obj.hasOwnProperty(p)) {
acc = xf["@@transducer/step"](acc, [p, obj[p]]);
// ^^^^^^^^^^^
// The mapping function `x => x + 1` is applied to `['foo', 1]`
// which returns `'foo,11'`
if(transducers.isReduced(acc)) {
acc = transducers.deref(acc);
break;
}
}
}
return xf["@@transducer/result"](acc);
};
Then:
transducers.addEntry = function(obj, entry) {
// entry: 'foo,11'
// entry[0] = 'f'
// entry[1] = 'o'
obj[entry[0]] = entry[1];
return obj;
};
This could be fixed by having the @@transducer/step function take three arguments:
- An accumulation
- A value
- A key (optional)
However I can't seem to find a lot of support for keys in the implementation. Just wondering whether this is by design or simply an oversight? Or just me not understanding something (most likely!)?