比方说像这样一段代码
const propAuths = flowDetailStore.flowData &&
flowDetailStore.flowData.workflow &&
flowDetailStore.flowData.workflow.propAuths
有没有简单的写法可以判断propsAuths是否存在!
比方说像这样一段代码
const propAuths = flowDetailStore.flowData &&
flowDetailStore.flowData.workflow &&
flowDetailStore.flowData.workflow.propAuths
有没有简单的写法可以判断propsAuths是否存在!
自己写一个吧,递归或者循环寻找。
我刚才写了一个循环查找的:
Object.prototype.getField = function(fields) {
if (!this || !fields || typeof this!=='object') {
return null;
}
const _fields = fields.split('.');
let ss = this, field = null;
let i = 0;
while(i<_fields.length) {
field = _fields[i];
if (field && ss[field]) {
ss = ss[field]
} else {
return null;
}
i++;
}
return ss;
}
测试样例:
var flowDetailStore = {
flowData: {
workflow: {
propAuths: 123456
}
}
}
flowDetailStore.getField('flowData.workflow.propAuths'); // 123456
flowDetailStore.getField('flowData.workflow'); // {propAuths: 123456}
flowDetailStore.getField('flowData'); // {workflow:{propAuths: 123456}}
flowDetailStore.getField('flowData11.workflow.propAuths'); // null
function has(obj, path) {
var ret = false;
if (obj && typeof obj === "object" && typeof path === "string") {
path = path.split(".");
ret = path.length > 0;
for (var i = 0; i < path.length; ++i) {
var key = path[i];
if (key in obj) {
if (obj[key]) obj = obj[key];
} else {
ret = false;
break;
}
}
}
return ret;
}
console.log(has({ a: { b: { c: 1 } } }, "a.b.c"));
13 回答12.9k 阅读
7 回答2.1k 阅读
3 回答1.3k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
6 回答1.2k 阅读✓ 已解决
6 回答1.1k 阅读
2 回答1.3k 阅读✓ 已解决
据我所知是有一个链判断运算符 的提案,不过最好还是不要用处于提案的特性。
loadsh里有个get的方法,可以参考一下。