JavaScript:简化公式以避免if语句
我认为有一种方法可以更好地使用单行公式编写此代码,它不使用JavaScript:简化公式以避免if语句,javascript,math,Javascript,Math,我认为有一种方法可以更好地使用单行公式编写此代码,它不使用if语句,因此X(0->0.5->1)Y应该是(0->1->0) var h=200; var w=200; var canvas=document.getElementById(“canvas”); var ctx=canvas.getContext('2d'); 对于(变量i=0;i
if
语句,因此X(0->0.5->1)Y应该是(0->1->0)
var h=200;
var w=200;
var canvas=document.getElementById(“canvas”);
var ctx=canvas.getContext('2d');
对于(变量i=0;i
一个选项是使用。这将允许您将条件逻辑简化为一行,如下所示:
const h = 200;
const w = 200;
const canvas = document.getElementById("canvas");
const ctx = canvas.getContext('2d');
for(var i = 0; i < w; i++){
const x = i/w;
// Use ternary operator, and apply factor to ternary result
const y = ((x < 0.5) ? (1 - x) : (x - 0.5)) * 2;
drawPoint(x, y);
}
function drawPoint(x, y){
ctx.fillRect(x * w, y * h, 1, 1);
}
常数h=200;
常数w=200;
const canvas=document.getElementById(“canvas”);
const ctx=canvas.getContext('2d');
对于(变量i=0;i
请注意,从技术上讲,这仍然是一个“if like”语句,它允许您在一行中表达与原始代码等价的逻辑
如果您真的想避免使用“If like”语句,可以使用以下数值插值方法来实现您所需要的:
for(var i = 0; i < w; i++){
const x = i/w;
const c = Math.round(x); // Returns 0 if x < 0.5 otherwise 1
const y = (((1 - c) * (1 - x)) + (c * (x - 0.5))) * 2;
drawPoint(x, y);
}
(变量i=0;i{
常数x=i/w;
const c=Math.round(x);//如果x<0.5则返回0,否则返回1
常数y=((1-c)*(1-x))+(c*(x-0.5))*2;
提取点(x,y);
}
然而,我倾向于避免这种方法,因为乍一看,它并不是特别清楚发生了什么。
1-x*2==-(x-0.5)*2
(不知道为什么把一个放在括号里而不是另一个)。你有一个条件,所以你需要一个“如果”,或类似的东西。如果您确实不想要If,您可以始终使用例如y=(1-x*2)*(x<0.5?1-1)代码>,但可读性较差。单行公式=不必要的复杂性哈!非信徒@丹尼做到了^^但是我倾向于避免这种数值方法,因为乍一看,y=(x*2-1)*Math.sign(x-0.5)
怎么样?我的理解是,如果你想避免一个明确的if,并将原始逻辑简化为一个单一的if,那就不太清楚了?“使用单行公式,不使用if语句。”