三元执行功能

时间:2014-02-24 19:07:39

标签: javascript linq

我正在开发一个项目,它将对数组中的数字进行大量处理。为了尝试封装一些条件逻辑,我做了类似

的事情

//忽略了扩展JS基类型

的好主意
Array.prototype.ifThenElse = function (statement, funcA, funcB, args) {
        return (statement) ? funcA(args) : funcB(args);
};

所以这需要一个布尔表达式并在bool为true时执行funcA,如果不是则执行funcB。这里的踢球者是args应该是数组本身。所以这是一个fiddle和代码:

  var newData = [1, 2, 3, 4];

    Array.prototype.ifThenElse = function (statement, funcA, funcB, args) {
        return (statement) ? funcA(args) : funcB(args);
    };
    function timesTwo(arr) {
         return arr.map(function (val, ix) {
            return val * 2;
        });
    };
    function timesThree(arr) {
        return arr.map(function (val, ix) {
            return val * 3;
        });
    };

     var nArray = newData.ifThenElse(newData[0] < newData[1],timesTwo,timesThree,newData);
     //console.log('This is the nArray ' + nArray);


     var expression = !!0 > 100;
     var expression2 = !!100 > 0;
     var dData = newData.ifThenElse(expression, timesThree, timesTwo, newData);
     var eData = newData.ifThenElse(expression2, timesThree, timesTwo, newData);
     console.log(dData);//2,4,6,8 <=expression is false, timesTwo called
     console.log(eData);//3,6,9,12 <=expression is true, timesThree called

我不想对可以传递给`ifThenElse的函数进行硬编码,但是我也想看看是否有一个聪明的解决方案使这更像LINQ,并且某种方式将newData作为最后一个参数自动传递方法

1 个答案:

答案 0 :(得分:1)

从对象调用的方法中this的值通常是指调用它的对象。

因为在数组上调用了Array.prototype方法,所以方法中this的值是对数组的引用。

所以只需传递this即可传递数组。

return (statement) ? funcA(this) : funcB(this);