Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import _ from 'lodash'
- const test1 = [
- { name: 'zhanghong', age: 32, money: 0, size: 12, },
- { name: 'wanghong', age: 20, size: 6 },
- { name: 'jinhong', age: 16, height: 172 },
- ]
- const test2 = [
- { name: 'zhanghong', gender: 'male', age: 14 },
- { name: 'wanghong', gender: 'female', age: 33 },
- { name: 'lihong', gender: 'female', age: 33 },
- ]
- const test3 = [
- { name: 'meinv' },
- ]
- const test4 = [
- { name: 'aaa' },
- ]
- const test5 = [
- { name: 'zhanghong', age: 'wtf' },
- ]
- const result = mergeUnionByKey(test1, test2, test3, test4, [], test5, 'name')
- function mergeUnionByKey(...args) {
- const config = _.chain(args)
- .filter(_.isString)
- .value()
- const key = _.get(config, '[0]')
- const strategy = _.get(config, '[1]') === 'override' ? _.merge : _.defaultsDeep
- if (!_.isString(key))
- throw new Error('missing key')
- const datasets = _.chain(args)
- .reject(_.isEmpty)
- .filter(_.isArray)
- .value()
- const datasetsIndex = _.mapValues(datasets, dataset => _.keyBy(dataset, key))
- const uniqKeys = _.chain(datasets)
- .flatten()
- .map(key)
- .uniq()
- .value()
- return _.chain(uniqKeys)
- .map(val => {
- const data = {}
- _.each(datasetsIndex, dataset => strategy(data, dataset[val]))
- return data
- })
- .filter(key)
- .value()
- }
- console.log(JSON.stringify(result, null, 4))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement