lodash 有合并对象数组的方法吗?

把某个值相等的对象合并起来,其他保留

var obj1 = [
  { label: 'aaa', value: 111 },
  { label: 'bbb', value: 222 },
  { label: 'ccc', value: 333 }
];

var obj2 = [
  { label: 'aaa', url: 'AAA' },
  { label: 'bbb', url:  'BBB' },
  { label: 'ddd', value: '2', url: 'CCC' }
];

// 期望结果:
[
  { label: 'aaa', value: 111, url: 'AAA' },
  { label: 'bbb', value: 222, url: 'BBB' },
  { label: 'ccc', value: 333 }
  { label: 'ddd', value: '2', url: 'CCC' }
]
阅读 10.6k
2 个回答

我没找到 Lodash 里有一次成型的方法,我回答过另一个类似的问题,可以参考下:
https://segmentfault.com/q/10...

如果用 Lodash 来实现,大概是这样

// const obj1 = [...];
// const obj2 = [...];

const _ = require("lodash");

const map2 = _.keyBy(obj2, "label");

const r = _(obj1).map(m => _.merge({}, m, map2[m.label]))
    .concat(_.differenceBy(obj2, obj1, "label"))
    .value();
    
console.log(r);

如果不关心是否修改原数据,

  • _merge({}, m, ...) 可以不要第 1 个空对象参数,改为 _.merge(m, ...)
  • _.defferenceBy 可以用 _.pullAllBy
新手上路,请多包涵
const arrays = [[1], [2, 3, 4], [5, 6]]
const result = _.spread(_.union)(arrays)
console.log(result)
// result : [1, 2, 3, 4, 5, 6]
推荐问题
宣传栏