繁体   English   中英

使用lodash合并两个数组中的对象

[英]Merge objects inside the two arrays using lodash

我正在尝试将两个数组合并为一个。 第一个具有默认配置,第二个具有实际配置。 我在这里发现了非常类似的问题,但是在我的特定情况下,它不起作用。

默认配置:

[
  { configurationOption: 'X provisioning', platform: 'X', value: true },
  { configurationOption: 'Y provisioning', platform: 'Y', value: true },
  { configurationOption: 'Z provisioning', platform: 'Z', value: true }
]

实际配置:

[
  { platform: 'X', value: false },
  { platform: 'Y', value: true }
]

预期结果:

[
  { configurationOption: 'X provisioning', platform: 'X', value: false },
  { configurationOption: 'Y provisioning', platform: 'Y', value: true },
  { configurationOption: 'Z provisioning', platform: 'Z', value: true }
]

因此,基本上需要做的是更新默认配置的“ value”属性,基于实际情况,一个棘手的部分是,实际配置中不存在某些configurationItem,并且实际配置缺少“ configurationOption”属性。

var config = _.unionBy(actual, defaultConf, 'platform');

这行是我可以获得的最接近的行,但是缺少“ configurationOption”属性。

这是CodePen,因此您可以使用它: https ://codepen.io/anon/pen/oBwLMb?editors=0012

根据defaults创建一个新的对象数组,该对象的每个元素是基于匹配platform将该默认值与实际actuals找到的相应实际数据合并的结果。

 const defaults = [ {configurationOption: 'X provisioning', platform: 'X', value: true}, {configurationOption: 'Y provisioning', platform: 'Y', value: true}, {configurationOption: 'Z provisioning', platform: 'Z', value: true}]; const actuals = [ {platform: 'X', value: false}, {platform: 'Y', value: true}]; var result = defaults.map(deflt => Object.assign( {}, deflt, actuals.find(actual => actual.platform === deflt.platform))); console.log(result); 

如果愿意,可以使用lodash重写它,可以使用_.map_.find . _.assign_.find

您可以使用_.merge() 因此,您的代码可以写为:

var config = _.merge({}, defaultConf, actual);
console.log(config);  

http://jsbin.com/yuyegamaka/edit?js,控制台

更新:如果要数组作为结果,则

var config = _.merge([], defaultConf, actual);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM