javascript - 使用 Lodash 合并共享键值对上的对象

标签 javascript lodash

我有两个对象数组 weatherpower,我想将它们合并到共享属性 date 上。有没有办法用 lodash 做到这一点?

 const weather = [
  {
    date: 2,
    weather: 2
  },
  {
    date: 1,
    weather: 1
  },
  {
    date: 3,
    weather: 3
  }
  ];

  const power = [
  {
    date: 1,
    power: 10
  },
  {
    date: 2,
    power: 20
  }];

  const merged = _.merge(weather, power); // <- This does not work as hoped for

预期输出仅包含具有匹配 date 字段的对象(因此 weather 数组中的 date: 3 对象被丢弃).

  const expected = [{
    date: 1,
    weather: 1,
    power: 10
  },
  {
    date: 2,
    weather: 2,
    power: 20
  }];

我觉得这应该可以通过 unionunionBymerge 或类似的方式实现,但我在文档中找不到匹配的示例.

最佳答案

通过使用 _.keyBy('date') 索引数组来创建索引对象,合并索引,并使用 _.values() 提取值:

const weather = [{"date":2,"weather":2},{"date":1,"weather":1},{"date":3,"weather":3}];

const power = [{"date":1,"power":10},{"date":2,"power":20}];

const weatherIndex = _.keyBy(weather, 'date');
const powerIndex = _.keyBy(power, 'date');

const result = _(powerIndex)
  .pick(_.keys(weatherIndex))
  .merge(_.pick(weatherIndex, _.keys(powerIndex)))
  .values()
  .value();

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>

关于javascript - 使用 Lodash 合并共享键值对上的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39063031/

相关文章:

javascript - 我可以使用 Lodash 来 "collapse"对象数组吗?

javascript - 从表中获取所有第一个子元素

javascript - 切换位置根据滚动位置固定

javascript - 如何用 lodash 对 2 个对象进行深度比较?

javascript - 根据第二个数组中的值过滤对象数组

javascript - 如果字符串等于 ""空,则不要将值传递给组件

javascript - 将网页文章内容在线自动发布到现有模板的最佳方法(使用 FTP?)

javascript - 数组的第一个元素是第一个最小值,第二个元素是第一个最大值,依此类推

javascript - 使用 JavaScript 在 "div"上写入文本

Javascript 低破折号