[英]How to remove nesting from this ternary operation?
Object.values(filter).filter(item =>
Array.isArray(item)
? item.length > 0
: typeof item === "boolean"
? item === true
: item !== null
).length ? filterIcon : unFilledIcon"
这里我想去掉这个三元运算符的嵌套。 我也想随之降低我的认知复杂性。
最简单的解决方案是使用常规if
使逻辑更具可读性:
const isFilter = Object.values(filter).some(item => {
if (Array.isArray(item))
return item.length > 0;
if (typeof item === "boolean")
return item === true;
return item !== null;
});
if (isFilter)
return filterIcon;
return unFilledIcon;
.filter().length
也替换为.some()
因为您只想查找是否有任何匹配项,而不是这些匹配项是什么。
您可以使用提前退出:
Object.values(filter).filter(item => {
if (Array.isArray(item)) return !!item.length;
if (typeof item === 'boolean') return item;
return item !== null;
}).length ? filterIcon : unFilledIcon"
并将item === true
和item !== null
与!!item
结合起来:
Object.values(filter).filter(item => {
if (Array.isArray(item)) return !!item.length;
return !!item;
}).length ? filterIcon : unFilledIcon"
在第二个代码中结果是不同的,例如,如果涉及未定义或空字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.