javascript - 使用 Lodash 进行深度合并

标签 javascript arrays merge lodash

我有两个对象数组,其中包含具有标签的地址和实际地址的对象:

var originalAddresses = [
  {
    label: 'home',
    address: { city: 'London', zipCode: '12345' }
  },
  {
    label: 'work',
    address: { city: 'New York', zipCode: '54321' }
  }
];

var updatedAddresses = [
  {
    label: 'home',
    address: { city: 'London (Central)', country: 'UK' }
  },
  {
    label: 'spain',
    address: { city: 'Madrid', zipCode: '55555' }
  }
];

现在我想通过 label 合并这些数组并比较地址的各个属性,并仅合并新地址中实际存在的属性。所以结果应该是这样的:

var result = [
  {
    label: 'home',
    address: { city: 'London (Central)', zipCode: '12345', country: 'UK' }
  },
  {
    label: 'work',
    address: { city: 'New York', zipCode: '54321' }
  },
  {
    label: 'spain',
    address: { city: 'Madrid', zipCode: '55555' }
  }
]

我如何使用 lodash 执行此操作? ? 我尝试了 unionBy()merge() 的组合。使用 unionBy() 我能够通过标签比较和连接数组,但这总是会替换整个对象。我可以确定合并地址,但这不会通过标签发生。

最佳答案

您可以使用 _.keyBy(arr, 'label') 将两个数组转换为对象,然后使用 _.merge() 进行深度合并:

var originalAddresses = [{
  label: 'home',
  address: {
    city: 'London',
    zipCode: '12345'
  }
}, {
  label: 'work',
  address: {
    city: 'New York',
    zipCode: '54321'
  }
}];

var updatedAddresses = [{
  label: 'home',
  address: {
    city: 'London (Central)',
    country: 'UK'
  }
}, {
  label: 'spain',
  address: {
    city: 'Madrid',
    zipCode: '55555'
  }
}];

var result = _.values(_.merge(
  _.keyBy(originalAddresses, 'label'),
  _.keyBy(updatedAddresses, 'label')
));

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/39246101/

相关文章:

python - pandas 中的高效链合并

git merge 重命名冲突

javascript - 客户端模块工作流程 : (Browserify + npm + gulp) or (RequireJS + Bower + gulp)?

javascript - 上传数据到网站

php - 获取复选框中的值并将其插入到mysql数据库中

javascript - 使用字符串中数组的每个元素组成标准化的句子

javascript - Dropzone.js 与 Rails 4 : "Template is missing" error

javascript - 如何从 NodeJS 中的 JSONObject 获取值?

java - 数组扫描阻止下一次字符串扫描?

tfs - 如何在 TFS 中分支和合并