PipeLine处理数据

PipeLine处理数据

PipeLine思路

处理数据是程序员的必修课,无论是后端程序员,还是前端程序员,都要面对的绕不开的问题。
处理问题的方式有很多,如何更聪明高效的处理才会不断进步。

刚开始接触的时候,最直观的思路就是循环for while等,但是当数据结构比较复杂的时候,这样处理不仅会很混乱,也同样低效。

所以PipeLine的思路就是利用语言标准库提供的方法去处理。
PipeLine

实例

看看我们抓取的生肉(未处理数据):
生肉
而我要做的是将里面的每个itemsgroupBy然后再reduce每个items中的ordered
刚开始接触这样复杂的数据,有点不知所措,在这里记录下我的处理过程,做个总结。

在这里用到了lodash

  // [[{...,items,...},{...,items,...}],[{...,items,...},{...,items,...}],[{...,items,...},{...,items,...}]...]
  let list = orders.map((arr) =>// arr: [{...,items,...},{...,items,...}...]
    ({items: arr.reduce(
      (pre, cur) => pre.concat(cur.items), [])}// [{items:[{_id:...,name:...,...},{items:[{_id:...,name:...,...},{}...]},{},{}...]
    )
  ).reduce((pre, cur) => (pre.concat(cur.items)), []); // [{...},{},{},{},{}]

  let items = _(list).groupBy('_id')// {id1: [{...}, {...}], id2: [{...}]}
    .mapValues((snackGroup, _id) => ({
      _id,
      name: snackGroup[0].name,
      ordered: snackGroup.reduce((sum, item) => sum + item.ordered, 0)
    })).value();

  return _.values(items);

最后呢,数据就被处理成想要的样子了:
熟肉

总结

Javascript 标准库

map

reduce

lodash

Show Comments