1. 程式人生 > >[Transducer] Transduce When the Collection Type is an Object

[Transducer] Transduce When the Collection Type is an Object

oda ati script let key tin less ava dash

We‘ve seen how we can transduce from arrays or other iterables, but plain objects aren‘t iterable in Javascript. In this lesson we‘ll modify our transduce() function so that it supports iterating from plain objects as well, treating each key value pair as an entry in the collection.

To do this we‘ll be using a lodash function called entries.

The whole point to make collection works for Object type is because when we use for.. of loop, Object is not itertable type, so Object still cannot be used. The fix that problem, we can use ‘entries‘ from lodash, to only get value as an array from the Object, so that we can loop though the array.

import {isPlainObject, entries} from ‘lodash‘;
import {map, into} from ‘../utils‘;

let transduce = (xf /** could be composed **/, reducer, seed, _collection) => {

    const transformedReducer = xf(reducer);
    let accumulation = seed;

    const collection = isPlainObject(_collection) ? entries(_collection) : _collection;

    
for (let value of collection) { accumulation = transformedReducer(accumulation, value); } return accumulation; }; const objectValues = obj => { return into([], map(kv => kv[1]), obj); }; objectValues({one: 1, two: 2});

[Transducer] Transduce When the Collection Type is an Object