取这种层级的数据,真的是很难受,有什么好的前台处理方式吗?
let {page = {}, stationLetterInfo = {}} = data;
function paginationHandle({total: 0, count: 0}) {
// ...
}
paginationHandle(page);
// 另一个函数也一样
有一点注意的是参数默认值只有在undefined情况下生效,需要和后台同学做好沟通
我看你的意思是不想写那么长的&&。
typescript 有个语法糖是 a?.b?.c 即是说有a的情况下接着才去判断a.b 以此类推。要不你自己封装一个小函数判断一下,比如
var data = {
page: {
count: '',
total: 1
}
}
function fn(param, data) {
if (data) {
return param.split('?.').every(function (v) {
return data[v] ? (data = data[v] , true) : false
})
}
else {
return false
}
}
// 判断的时候就
if(fn('page?.count', data)) 这样
这里只给你提供一个简单的思路,代码不够严谨,比如0的时候也被隐式转换false了。
不过遇到这种情况最好的处理方法,就是跟后端沟通一下。毕竟是团队协作开发,沟通也是职场的重要技能。
/**
* 安全的获取值
*
* safe_get(obj, 'a.b.c') // 123
* safe_get(obj, 'a.b.d', '我是默认值') // 我是默认值
*
* @export
* @param {*} targetObj
* @param {string} keyString
* @param {*} defaultValue
* @returns {*}
*/
export function safe_get(targetObj: any, keyString: string, defaultValue: any): any {
const path = String(keyString).split('.');
const result = path.reduce((preObj, curPath) => {
return (preObj !== null && !is_undefined(preObj))
? preObj[curPath]
: preObj;
}, targetObj);
return is_undefined(result)
? (is_undefined(defaultValue) ? result : defaultValue)
: result;
}
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
题主的真实需求描述的不太明确,只能臆测下先
需求1:不想写深层次的数据判断,和取层级结构的数据
其实这一步的简化是最简单的,向其他人回答的一样,和后端做好约定,保证这几个值都是有默认值的
但是,如果碰到个死脑筋的后端怎么办呢!?
(题主问题中的第二段代码建议采用此方式)