在 Javascript 中,当您有一组数组来对数据集执行任务,并且有时您不想包含所有数组而是包含组合时,处理这种情况的最佳方法是什么。
我的数组在这个小片段 L、C、H、V、B、A、S 中进行了标记,从 Angular 来看,代码大约有 2500 行,如下所示。 (我已经从这篇文章中删除了代码注释)
if(C[0].length>0){
L=L[1].concat(+(MIN.apply(this,L[0])).toFixed(7));
C=C[1].concat(C[0][0]);
H=H[1].concat(+(MAX.apply(this,H[0])).toFixed(7));
V=V[1].concat((V[0].reduce(function(a,b){return a+b}))/(V[0].length));
B=B[1].concat((MAX.apply(this,B[0])-MIN.apply(this,B[0]))/2);
A=A[1].concat((MAX.apply(this,A[0])-MIN.apply(this,A[0]))/2);
D=D[1].concat((D[0].reduce(function(a,b){return a+b}))/(D[0].length));
S=S[1].concat((S[0].reduce(function(a,b){return a+b}))/(S[0].length));
}
在这种情况下,用 bool 条件的语气在代码中乱七八糟地询问每个循环或代码部分是否包含在任务中似乎会适得其反,甚至更愚蠢的是在每个循环迭代中询问内联条件,因为这些也会减慢处理速度,并使代码看起来像迷宫或兔子洞。
是否有逻辑方法/库来忽略指令或在选项设置为 false 时跳过
到目前为止我所想到的都是毫无意义的内联事物
var op=[0,1,1,0,0,0,0,0]; //options
var L=[],C=[],H=[],V=[],B=[],A=[],D=[],S=[];
op[0]&&[L[0]=1];
op[1]&&[C[0]=1,console.log('test, do more than one thing')];
op[2]&&[H[0]=1];
op[3]&&[V[0]=1];
op[4]&&[B[0]=1];
op[5]&&[A[0]=1];
op[6]&&[A[0]=1];
它的工作原理是根据选项要求仅将 C[0]
和 H[0]
设置为 1,但它失败了,因为它需要提出七个问题循环的每次迭代,因为它可以在循环内完成。不是制作循环或代码部分的七个版本,也不是在每个循环内提出问题,是否还有另一种风格/方法?
我还注意到,如果我创建一个数组,那么在某个时候使其等于 NaN 而不是 undefined 或 null 控制台不会提示
var L=[],C=[],H=[],V=[],B=[],A=[],D=[],S=[];
L=NaN;
L[0]=1;
//1
console.log(L); //NaN
L=undefined;
L[0]=1
//TypeError: Cannot set property '0' of undefined
L=null
L[0]=1
//TypeError: Cannot set property '0' of null
我变暖了吗?我假设如果我在 isNaN(L)===true
时对 L[0]
执行一些数学运算,则数学运算正在完成但未存储,因此该行是真的没有被忽视..
最佳答案
如果我明白你想要什么,我会做这样的事情。
var op = [...],
opchoice = {
//these can return nothing, no operation, or a new value.
'true': function(val){ /*operation do if true*/ },
'false': function(val){ /*operation do if false*/ },
//add more operations here.
//keys must be strings, or transformed into strings with operation method.
operation: function(val){
//make the boolean a string key.
return this[''+(val == 'something')](val);
}
};
var endop = [];//need this to prevent infinite recursion(loop).
var val;
while(val = op.shift()){
//a queue operation.
endop.push(opchoice.operation(val));
}
我确信这并不完全是您想要的,但它已经接近满足不需要到处都有大量条件的需求。
您的另一个选择是在每一行上执行此操作。
A = isNaN(A) ? A.concat(...) : A;
我个人更喜欢另一种方法。
关于javascript - 编程可选无知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26705294/