Advertisement
Guest User

Untitled

a guest
Jan 19th, 2017
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.33 KB | None | 0 0
  1. import _ from 'lodash'
  2.  
  3. const test1 = [
  4. { name: 'zhanghong', age: 32, money: 0, size: 12, },
  5. { name: 'wanghong', age: 20, size: 6 },
  6. { name: 'jinhong', age: 16, height: 172 },
  7. ]
  8.  
  9. const test2 = [
  10. { name: 'zhanghong', gender: 'male', age: 14 },
  11. { name: 'wanghong', gender: 'female', age: 33 },
  12. { name: 'lihong', gender: 'female', age: 33 },
  13. ]
  14.  
  15. const test3 = [
  16. { name: 'meinv' },
  17. ]
  18.  
  19. const test4 = [
  20. { name: 'aaa' },
  21. ]
  22.  
  23. const test5 = [
  24. { name: 'zhanghong', age: 'wtf' },
  25. ]
  26.  
  27. const result = mergeUnionByKey(test1, test2, test3, test4, [], test5, 'name')
  28.  
  29. function mergeUnionByKey(...args) {
  30.  
  31. const config = _.chain(args)
  32. .filter(_.isString)
  33. .value()
  34.  
  35. const key = _.get(config, '[0]')
  36.  
  37. const strategy = _.get(config, '[1]') === 'override' ? _.merge : _.defaultsDeep
  38.  
  39. if (!_.isString(key))
  40. throw new Error('missing key')
  41.  
  42. const datasets = _.chain(args)
  43. .reject(_.isEmpty)
  44. .filter(_.isArray)
  45. .value()
  46.  
  47. const datasetsIndex = _.mapValues(datasets, dataset => _.keyBy(dataset, key))
  48.  
  49. const uniqKeys = _.chain(datasets)
  50. .flatten()
  51. .map(key)
  52. .uniq()
  53. .value()
  54.  
  55. return _.chain(uniqKeys)
  56. .map(val => {
  57. const data = {}
  58. _.each(datasetsIndex, dataset => strategy(data, dataset[val]))
  59. return data
  60. })
  61. .filter(key)
  62. .value()
  63.  
  64. }
  65.  
  66. console.log(JSON.stringify(result, null, 4))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement