javascript - 深度合并,但前提是 js 中的值不为空
问题描述
我正在使用 lodash mergeWith 并且所有功能都适用于以下函数,但是一旦我添加了深层嵌套对象,那么定制器就不会考虑深层嵌套对象。
const merge = (main, base) => {
return mergeWith(main, base, (a, b) => {
return b === "" ? a : b;
});
};
这行得通
const main = {
name: 'tim'
age: '24'
}
const base = {
name: ''
age: '20'
}
const merged = merge(main,base);
// {name: tim, age: 20}
这不能按预期工作
const main = {
name: 'tim'
age: '24'
data: { height: '11', width: '10' }
}
const base = {
name: ''
age: '20'
data: { height: '21', width: '' }
}
const merged = merge(main,base);
// {name: tim, age: 20, data: { height: '21', width: '' } }
即使它是空的,它的合并宽度也是如此。应该是 // {name: tim, age: 20, data: { height: '21', width: '10' } }
解决方案
undefined
如果需要遍历对象,则需要返回。所以你的mergeWith
比较应该是:
const merged = _.mergeWith(main,base,(a,b) => {
if (typeof b === 'object') return;
return b === "" ? a : b;
});
推荐阅读
- android - 在 Fragment getActivity() 有时返回 null
- go - Google Cloud Speech to Text API v1p1beta1 RPC 中 AlternativeLanguageCodes 的使用
- node.js - 在nodejs中使用exec()创建新进程时,它是否与当前进程并行运行,nodejs如何处理它?
- c# - 向电子邮件模板正文添加 2 个参数
- node.js - 使用 react js / node js 中的数据在发布请求后重定向
- swift - 删除 Firebase 数据时无法更新 tableview 行
- symfony - 编辑奏鸣曲用户数据
- php - 配置设置更新
- python - 从数组中提取所有最小值:
- python - 当项目订单似乎随着分页而洗牌时进行网络抓取 - 确实是工作