繁体   English   中英

如何从这个三元操作中删除嵌套?

[英]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 === trueitem !== 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM