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

发布于 2022-09-11 20:48:43 字数 482 浏览 13 评论 0

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

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' }
]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

云朵有点甜 2022-09-18 20:48:43

我没找到 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
软糯酥胸 2022-09-18 20:48:43
const arrays = [[1], [2, 3, 4], [5, 6]]
const result = _.spread(_.union)(arrays)
console.log(result)
// result : [1, 2, 3, 4, 5, 6]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文