Javascript改进代码切换语句
我试图通过减少重复次数来改进代码 在这里的代码中,我想避免这个切换步骤,因为除了比较运算符Javascript改进代码切换语句,javascript,optimization,switch-statement,Javascript,Optimization,Switch Statement,我试图通过减少重复次数来改进代码 在这里的代码中,我想避免这个切换步骤,因为除了比较运算符==和之外,不同的情况是相同的== function Test(step, nb_change, name, value, previous_name){ switch (step) { case 1: for (var i = 0; i < nb_change; i++) { if (name === previous_
==
和之外,不同的情况是相同的==代码>
function Test(step, nb_change, name, value, previous_name){
switch (step) {
case 1:
for (var i = 0; i < nb_change; i++) {
if (name === previous_name[nb_change-1-i][1] && value === 'nd') {
To_change(i);
return true;
}
}
return false;
case 2:
for (var i = 0; i < nb_change; i++) {
if (name === previous_name[nb_change-1-i][1] && value !== 'nd') {
To_change(i);
return true;
}
}
return false;
case 3:
for (var i = 0; i < nb_change; i++) {
if (select_name !== previous_name[nb_change-1-i][1] && value !== 'nd') {
To_change(i);
return true;
}
}
return false;
default:
alert('ERROR');
break;
}
}
功能测试(步骤、nb\u更改、名称、值、上一个\u名称){
开关(步骤){
案例1:
对于(变量i=0;i
请毫不犹豫地提出一个可以帮助我的解决方案
这只是一个例子,从很多!
当我认为我的代码本可以写得更好时,我如何找到帮助来改进代码
谢谢您的帮助。您可以使用一个函数来接收一个参数,该参数描述如何处理相等性。在这里,我们可以利用按位操作来给出所需的描述
function Test(step, nb_change, name, value, previous_name) {
const BOTH_EQ = 3;
const NAME_EQ = 2;
const NO_EQ = 0;
switch (step) {
case 1:
return myFunc(BOTH_EQ, nb_change, name, previous_name, value);
case 2:
return myFunc(NAME_EQ, nb_change, name, previous_name, value);
case 3:
return myFunc(NO_EQ, nb_change, name, previous_name, value)
default:
alert('ERROR');
break;
}
}
function myFunc(compare, nb_change, name, previous_name, value) {
for (var i = 0; i < nb_change; i++) {
const first_eq = (name === previous_name[nb_change-1-i][1]) << 1;
const second_eq = value === 'nd';
if (compare === (first_eq | second_eq)) {
To_change(i);
return true;
}
}
return false;
}
也许是这样的
功能测试(步骤、nb\u更改、名称、值、上一个\u名称){
var结果=假;
对于(变量i=0;i
功能测试(步骤、nb更改、名称、值、以前的名称){
var valueCheck,
姓名核对;
开关(步骤){
案例1:
valueCheck=值=='nd';
名称检查=名称===以前的名称[nb_change-1-i][1];
案例2:
valueCheck=value!==nd');
名称检查=名称===以前的名称[nb_change-1-i][1];
案例3:
valueCheck=值!=='nd';
名称检查=选择名称!==以前的名称[nb\U change-1-i][1];
违约:
警报(“错误”);
打破
}
对于(变量i=0;i
查看每个箱子的主体。找出它们的相同点和不同点。使相似的部分成为函数的主体,并使不同的部分成为函数的参数。这是泛化代码的基本方法。@j08691我不知道这是一件事,酷。@JamesThorpe:你说得对,我错过了。将更新。伟大的按位操作!你的例子很好,只是我不需要switch语句,我可以直接使用const equality来代替step变量。@jardindeden:是的,如果你可以更改step
,那绝对是正确的方法。
true, true == ((true << 1) | true) == ((1 << 1) | 1) == (0010 | 0001) == 3
true, false == ((true << 1) | false) == ((1 << 1) | 0) == (0010 | 0000) == 2
false, true == ((false << 1) | true) == ((0 << 1) | 1) == (0000 | 0001) == 1
false, false == ((false << 1) | false) == ((0 << 1) | 0) == (0000 | 0000) == 0
function Test(step, nb_change, name, value, previous_name){
var valueCheck,
nameCheck;
switch (step) {
case 1:
valueCheck = value === 'nd';
nameCheck = name === previous_name[nb_change-1-i][1];
case 2:
valueCheck = value !== 'nd');
nameCheck = name === previous_name[nb_change-1-i][1];
case 3:
valueCheck = value !== 'nd';
nameCheck = select_name !== previous_name[nb_change-1-i][1];
default:
alert('ERROR');
break;
}
for (var i = 0; i < nb_change; i++) {
if (nameCheck && valueCheck) {
To_change(i);
return true;
}
}
return false;
}