[英]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.