问题描述
遇到这样一个题,如下
const a = {
fruits: ['apple', 'banana'],
series: {
apple: ['C'],
banana: ['A', 'B'],
}
};
const b = {
fruits: ['banana', 'orange'],
animals: ['pig'],
series: {
banana: ['B', 'C'],
orange: ['A'],
}
};
要求输出:
{
fruits: ['apple', 'banana', 'orange'],
animals: ['pig'],
series: {
apple: ['C'],
banana: ['A', 'B', 'C'],
orange: ['A'],
}
使用各种深拷贝的方法都不行,只会覆盖,并不会有取并集这么一个效果
解决方案
使用lodash库中的merge函数
引入lodash库(在线地址)
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>
使用merge函数
console.log(_.merge(a, b));
输出结果:
后续
- 了解一下这个lodash库的其他方法(防抖,去重等等)
- 复习深拷贝的各种实现
- 尝试使用原生js写一个函数,实现上述需求
(目前的一个思路是对子数组去重,对子对象递归)