gpt4 book ai didi

javascript - 函数的三元执行

转载 作者:行者123 更新时间:2023-11-28 01:32:10 26 4
gpt4 key购买 nike

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

//忽略扩展 JS 基本类型不是一个好主意的事实

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

因此,这需要一个 bool 表达式,如果 bool 为真,则执行 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 作为最后一个参数传递方法的介绍

最佳答案

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

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

因此只需传递 this 即可传递数组。

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

关于javascript - 函数的三元执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21996662/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com