【发布时间】:2017-06-08 06:47:40
【问题描述】:
我正在尝试将两个数组合并为一个。 第一个具有默认配置,第二个具有实际配置。 我发现了非常相似的问题here,但在我的具体情况下它不起作用。
默认配置:
[
{ 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
【问题讨论】:
-
也许尝试将方法而不是 'platofrm' 字符串作为第三个参数?你确定它不工作吗?似乎在这里工作-> codepen.io/kejt/pen/PWjGWa?editors=1111
-
_.merge(defaultConf, actual)不是产生了预期的结果吗? -
actuals 数组中的每个元素是否保证在平台上与 defaults 数组中的元素一一对应?换句话说,实际数组是否总是按顺序包含平台 X 和 Y?
-
不可以,实际配置中顺序可以改变,只有默认配置不变。
标签: javascript arrays object merge lodash