javascript - 编程可选无知

标签 javascript conditional-statements

在 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/

相关文章:

Java 的 Random 类的 Javascript 实现将使用相同的种子生成相同的序列

bash - bash 中的以下条件表达式有什么问题?

超过一定数量的元素后,MySQL(NOT IN)条件无法正确返回

javascript - Vuejs 三元运算符/条件在 v-bind-style 中不起作用

qt - 用于更新属性的 QML 条件逻辑

javascript - 我的正则表达式与条件语句不匹配

javascript - 浏览器窗口意外关闭时发出警报

javascript - 获取 HTML 表中整个选定的列值

javascript - 如何停止一个自调用的 setTimeout() 函数?

javascript - jQuery:如何获取动态生成元素的ID?