0

像这样, 需要拿到传入参数的padding值, 但是不确定是否传入了eleStyle, 更不确定eleStyle中的其他属性是否传入, 目前使用三元表达式进行判断, 但依然有些繁琐...

data: {
    show: true,
    //可能传入的参数
    eleStyle: {
        //以下某一参数均有可能不传
        width: 100,
        height: 100,
        padding: 20,
    }
}
let padding = eleStyle && eleStyle.padding ? eleStyle.padding : 10
//当eleStyle.padding为0时, 所得到的padding值仍为默认, 所以可能应该是下面这种:
let padding = eleStyle && eleStyle.padding !== undefined ? eleStyle.padding : 10

如果需要的参数取自更深层的对象, 那这样写也显得十分臃肿, 所以请教一下有没有什么好的方法解决这种问题...

2019-10-10 提问

查看全部 5 个回答

0

已采纳
let padding = 'eleStyle.padding'.split('.').reduce((res,key)=>{return res != null ? res[key] : null},data)
padding = padding != null ? padding : 10;

推荐答案

1

30-seconds-of-code里有算是很优雅的写法,可以参考一下。其他做法的内部实现可能不一样,但理念很类似。

const get = (from, ...selectors) =>
  [...selectors].map(s =>
    s
      .replace(/\[([^\[\]]*)\]/g, '.$1.')
      .split('.')
      .filter(t => t !== '')
      .reduce((prev, cur) => prev && prev[cur], from)
  );

推广链接