使用Lodash按属性合并对象数组

ben*_*man 38 javascript arrays merge lodash

我有两个对象数组,表示具有标签和值的电子邮件地址:

var original = [
  {
    label: 'private',
    value: 'private@johndoe.com'
  },
  {
    label: 'work',
    value: 'work@johndoe.com'
  }
];

var update = [
  {
    label: 'private',
    value: 'me@johndoe.com'
  },
  {
    label: 'school',
    value: 'schhol@johndoe.com'
  }
];
Run Code Online (Sandbox Code Playgroud)

现在我想按label字段比较和合并两个数组,以便结果如下所示:

var result = [
  {
    label: 'private',
    value: 'me@johndoe.com'
  },
  {
    label: 'work',
    value: 'work@johndoe.com'
  },
  {
    label: 'school',
    value: 'schol@johndoe.com'
  }
]
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做,例如使用lodash

And*_*eas 82

_.unionBy():
此方法与_.union类似,不同之处在于它接受为每个数组的每个元素调用的iteratee,以生成计算唯一性的标准.结果值从发生值的第一个数组中选择.

var original = [
  { label: 'private', value: 'private@johndoe.com' },
  { label: 'work', value: 'work@johndoe.com' }
];

var update = [
  { label: 'private', value: 'me@johndoe.com' },
  { label: 'school', value: 'schol@johndoe.com' }
];

var result = _.unionBy(update, original, "label");

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

  • @Andreas小小的后续问题:如何实现相同的结果,但是当数组中的对象包含另一个对象作为值时?例如:`[{label:'private',value:{propa:'some text',propb:12}}]`我希望结果合并,这样如果标签与原始属性相同value将与新值中的属性合并. (4认同)
  • 如果两个数组中的属性名称不同怎么办? (3认同)
  • 那很干净 (2认同)