Shorthand JS条件
Shorthand JS Condition
对于这种 shorthand 情况,我需要一些帮助。到目前为止,我对它的尝试变得有点挑战,而且似乎无法使其更具可读性。我相信它被缩小短路了。
if (a === !0 || perSearch.rates.fy2) {
e();
} else if ( perSearch.rates.fy1.multiple || perSearch.rates.fy2.multiple ){
calculateRates();
} else {
perSearch.rates.fy1.multiple;
}
来自这个简洁的表达式:
a === !0 || (perSearch.rates.fy2 ? perSearch.rates.fy1.multiple || perSearch.rates.fy2.multiple ? e() : calculateRates() : perSearch.rates.fy1.multiple ? e() : calculateRates())
你的表情对应
if (a === !0) {
} else {
if (perSearch.rates.fy2) {
if (perSearch.rates.fy1.multiple || perSearch.rates.fy2.multiple) {
e();
} else {
calculateRates();
}
} else {
if (perSearch.rates.fy1.multiple) {
e();
} else {
calculateRates();
}
}
}
可以简化为
if (a !== true) {
if (perSearch.rates.fy1.multiple || (perSearch.rates.fy2 && perSearch.rates.fy2.multiple)) {
e();
} else {
calculateRates();
}
}
应该是这样的:
if (a !== false) {
if (perSearch.rates.fy2) {
if (!perSearch.rates.fy1.multiple) {
if (perSearch.rates.fy2.multiple) {
e()
}
else {
calculateRates()
}
}
}
else {
if (perSearch.rates.fy1.multiple) {
e()
}
else {
calculateRates()
}
}
}
这是某种 return(return 一个 || 结果),还是一个大条件(a 为真或其他代码求值为真)?无论哪种方式,我都倾向于分阶段对其进行攻击,块代码,然后抽象,重复直到代码看起来易于管理。
阻止
屏蔽条件语句以使其更易于阅读。
(
a === !0
|| (
perSearch.rates.fy2
? (perSearch.rates.fy1.multiple || (perSearch.rates.fy2.multiple ? e() : calculateRates()))
: (perSearch.rates.fy1.multiple ? e() : calculateRates())
)
)
摘要
抽象出一些大而简单的逻辑重复。
const x = rates => ( (rates) ? e() : calculateRates() );
(
a === true || (perSearch.rates.fy2)
? ((perSearch.rates.fy1.multiple) || x(perSearch.rates.fy2.multiple))
: x(perSearch.rates.fy1.multiple)
)
继续
编写代码以分离出条件。
const calc = rates => ((rates) ? e() : calculateRates());
const compare = rates => {
let fy1 = (rates.hasOwnProperty('fy1')) ? rates.fy1 : false;
let fy2 = (rates.hasOwnProperty('fy2')) ? rates.fy2 : false;
if (fy2) {
if (fy1.multiple) {
return fy1.multiple;
}
return calc(fy2.multiple);
} else {
return calc(fy1.multiple);
}
}
a === true || compare(perSearch.rates);
编辑(更多继续!)
再看一遍我认为它会受益于一些早期的 returns。
看条件化简。
- 如果 fy2 和如果 fy1.multiple {return fy1.multiple}
- 如果不是fy2 {return fy1.multiple}
如果 fy2 而不是 fy1.multiple {return fy2.multiple}
const calc = rates => ((rates) ? e() : calculateRates());
const compare = rates => {
let fy1 = (rates.hasOwnProperty('fy1')) ? rates.fy1 : false;
let fy2 = (rates.hasOwnProperty('fy2')) ? rates.fy2 : false;
// consolidate conditions leading to same place.
if (!fy2 || (fy2 && fy1 && fy1.multiple)) {
return calc(fy1.multiple);
}
return calc(fy2.multiple);
}
a === true || compare(perSearch.rates);
对于这种 shorthand 情况,我需要一些帮助。到目前为止,我对它的尝试变得有点挑战,而且似乎无法使其更具可读性。我相信它被缩小短路了。
if (a === !0 || perSearch.rates.fy2) {
e();
} else if ( perSearch.rates.fy1.multiple || perSearch.rates.fy2.multiple ){
calculateRates();
} else {
perSearch.rates.fy1.multiple;
}
来自这个简洁的表达式:
a === !0 || (perSearch.rates.fy2 ? perSearch.rates.fy1.multiple || perSearch.rates.fy2.multiple ? e() : calculateRates() : perSearch.rates.fy1.multiple ? e() : calculateRates())
你的表情对应
if (a === !0) {
} else {
if (perSearch.rates.fy2) {
if (perSearch.rates.fy1.multiple || perSearch.rates.fy2.multiple) {
e();
} else {
calculateRates();
}
} else {
if (perSearch.rates.fy1.multiple) {
e();
} else {
calculateRates();
}
}
}
可以简化为
if (a !== true) {
if (perSearch.rates.fy1.multiple || (perSearch.rates.fy2 && perSearch.rates.fy2.multiple)) {
e();
} else {
calculateRates();
}
}
应该是这样的:
if (a !== false) {
if (perSearch.rates.fy2) {
if (!perSearch.rates.fy1.multiple) {
if (perSearch.rates.fy2.multiple) {
e()
}
else {
calculateRates()
}
}
}
else {
if (perSearch.rates.fy1.multiple) {
e()
}
else {
calculateRates()
}
}
}
这是某种 return(return 一个 || 结果),还是一个大条件(a 为真或其他代码求值为真)?无论哪种方式,我都倾向于分阶段对其进行攻击,块代码,然后抽象,重复直到代码看起来易于管理。
阻止
屏蔽条件语句以使其更易于阅读。
(
a === !0
|| (
perSearch.rates.fy2
? (perSearch.rates.fy1.multiple || (perSearch.rates.fy2.multiple ? e() : calculateRates()))
: (perSearch.rates.fy1.multiple ? e() : calculateRates())
)
)
摘要
抽象出一些大而简单的逻辑重复。
const x = rates => ( (rates) ? e() : calculateRates() );
(
a === true || (perSearch.rates.fy2)
? ((perSearch.rates.fy1.multiple) || x(perSearch.rates.fy2.multiple))
: x(perSearch.rates.fy1.multiple)
)
继续
编写代码以分离出条件。
const calc = rates => ((rates) ? e() : calculateRates());
const compare = rates => {
let fy1 = (rates.hasOwnProperty('fy1')) ? rates.fy1 : false;
let fy2 = (rates.hasOwnProperty('fy2')) ? rates.fy2 : false;
if (fy2) {
if (fy1.multiple) {
return fy1.multiple;
}
return calc(fy2.multiple);
} else {
return calc(fy1.multiple);
}
}
a === true || compare(perSearch.rates);
编辑(更多继续!)
再看一遍我认为它会受益于一些早期的 returns。
看条件化简。
- 如果 fy2 和如果 fy1.multiple {return fy1.multiple}
- 如果不是fy2 {return fy1.multiple}
如果 fy2 而不是 fy1.multiple {return fy2.multiple}
const calc = rates => ((rates) ? e() : calculateRates()); const compare = rates => { let fy1 = (rates.hasOwnProperty('fy1')) ? rates.fy1 : false; let fy2 = (rates.hasOwnProperty('fy2')) ? rates.fy2 : false; // consolidate conditions leading to same place. if (!fy2 || (fy2 && fy1 && fy1.multiple)) { return calc(fy1.multiple); } return calc(fy2.multiple); } a === true || compare(perSearch.rates);