比如一个多维数组 data.goods.info.name 现在的业务是 这个 name 定义 并且存在 就显示名字 否则不显示
然后 这个 data 数组是后端接口给过来的,从 data 开始 后面的节点都不一定存在的
那么首先我不能直接这么写 if(data.goods.info.name){ // } 因为 比如 data.goods 这个节点不存在 这个 js 就报错了
而是需要如下写法 if(data && data.goods && data.goods.info && data.goods.info.name){ // }
但这么写太繁琐了 有没简单写写法
换做其他语言 比如 php 直接判断 data.goods.info.name 虽然不报 err 级别错误 但是也有 warm 也是不合理的
1
agagega 2018-10-25 12:51:38 +08:00
Ruby 里面的键值对有个实例方法叫 dig,比如 data.dig('goods', 'info', 'name'),只要中间哪一步为空了,整个就直接返回空。你也可以写个类似的方法。
有些语言里好像有类似 ?. 这样的运算符,如果操作对象是空的话结果也是空。 类似这样: ```javascript Object.prototype.dig = function() { let obj = this for (let i = 0; i < arguments.length; ++i) { let next = obj[arguments[i]] if (i === arguments.length - 1 && typeof next !== 'undefined' || next !== null && typeof next === 'object') { obj = next } else { return null } } return obj } ``` |
2
dai1988622 OP @agagega 直接在自定义一个 dig 方法来完成这个事情嘛 大佬厉害
|