您的位置:首页 > 移动开发 > Objective-C

[Transducer] Transduce When the Collection Type is an Object

2018-01-17 20:44 513 查看
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});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐