我正在开发一个项目,它将对数组中的数字进行大量处理。为了尝试封装一些条件逻辑,我做了类似
的事情//忽略了扩展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作为最后一个参数自动传递方法
答案 0 :(得分:1)
从对象调用的方法中this
的值通常是指调用它的对象。
因为在数组上调用了Array.prototype
方法,所以方法中this
的值是对数组的引用。
所以只需传递this
即可传递数组。
return (statement) ? funcA(this) : funcB(this);