如何在javascript中使此函数动态

如何在javascript中使此函数动态,javascript,jquery,Javascript,Jquery,我有以下代码: 我想让它接受这个函数 function (x1,y1,x2, y2,x3, y3, x4, y4, xToCheck, yToCheck, Allowance); 这是var x和var y的可能组合 var x1 = x1 - x2; var y1 = y1 - y2; var x2 = x2 - x3; var y2 = y2 - y3; var x3 = x3 - x4; var y3 = y3 - y4; var x4 = x2 - x4; var y4 = y2 -

我有以下代码:

我想让它接受这个函数

function (x1,y1,x2, y2,x3, y3, x4, y4, xToCheck, yToCheck, Allowance);
这是
var x
var y
的可能组合

var x1 = x1 - x2;
var y1 = y1 - y2;
var x2 = x2 - x3;
var y2 = y2 - y3;
var x3 = x3 - x4;
var y3 = y3 - y4;
var x4 = x2 - x4;
var y4 = y2 - y4;
var x5 = x1 - x3;
var y5 = y1 - y3;
注意:上面的函数只能接受一组
var
,即
var x1
var y1
,我想要的是使我的函数更具动态性,以便它可以接受另一组
var

您的“余量”(公差)应在距离点线上。请参见如何计算:

您的“余量”(公差)应在距离点线上。请参见如何计算:


是否希望函数获取一组未确定/动态的坐标
x1,y1。。。xn,yn

然后可以对所有坐标使用单个参数(数组或对象),如下所示:

ST.PT.isMouseOnLine = function (points, xToCheck, yToCheck, Allowance) {}
然后传递一组点:

ST.PT.isMouseOnLine([ {x: 10, y:10}, { x:20, y:30}, { x:30, y:10} ], 15, 15, 10 );

因此,您可以迭代
数组并对每个点进行检查。

是否希望函数获取一组未确定/动态的坐标
x1,y1。。。xn,yn

然后可以对所有坐标使用单个参数(数组或对象),如下所示:

ST.PT.isMouseOnLine = function (points, xToCheck, yToCheck, Allowance) {}
然后传递一组点:

ST.PT.isMouseOnLine([ {x: 10, y:10}, { x:20, y:30}, { x:30, y:10} ], 15, 15, 10 );

因此,您可以迭代
数组并对每个点进行检查。

您的意思是,参数的计数是可变的吗?
我想您只是使用了一个数组类型参数。
像这样:

function (xs,ys, xToCheck, yToCheck, Allowance){
    var newxs,newys;
    newxs[0]=xs[0]-xs[1];//compute newxs,newys from xs,ys
    ...
}
//just a example,it's not correct
for(int i=0;i<x.length;i++){
    newxs[i]=xs[i]-xs[i+1];
    newys[i]=ys[i]-ys[i+1];
    ...
}
并使用一些算法从xs和ys计算newxs。 像这样:

function (xs,ys, xToCheck, yToCheck, Allowance){
    var newxs,newys;
    newxs[0]=xs[0]-xs[1];//compute newxs,newys from xs,ys
    ...
}
//just a example,it's not correct
for(int i=0;i<x.length;i++){
    newxs[i]=xs[i]-xs[i+1];
    newys[i]=ys[i]-ys[i+1];
    ...
}
//只是一个例子,它不正确

对于(int i=0;i您的意思是,参数的计数是可变的吗?
我想您只是使用了一个数组类型参数。
像这样:

function (xs,ys, xToCheck, yToCheck, Allowance){
    var newxs,newys;
    newxs[0]=xs[0]-xs[1];//compute newxs,newys from xs,ys
    ...
}
//just a example,it's not correct
for(int i=0;i<x.length;i++){
    newxs[i]=xs[i]-xs[i+1];
    newys[i]=ys[i]-ys[i+1];
    ...
}
并使用一些算法从xs和ys计算newxs。 像这样:

function (xs,ys, xToCheck, yToCheck, Allowance){
    var newxs,newys;
    newxs[0]=xs[0]-xs[1];//compute newxs,newys from xs,ys
    ...
}
//just a example,it's not correct
for(int i=0;i<x.length;i++){
    newxs[i]=xs[i]-xs[i+1];
    newys[i]=ys[i]-ys[i+1];
    ...
}
//只是一个例子,它不正确

对于(int i=0;i,如果您想要发送变量的可选默认值(如您在注释中所述),请使用以下结构:

假设我们希望
xToCheck、yToCheck、amount
是可选的:

ST.PT.isMouseOnLine = function (x1, y1, x2, y2, _xToCheck, _yToCheck, _Allowance)   {

    //Get the variables:
    xToCheck = _xToCheck || 5; //replace value with default value or variable.
    yToCheck = _yToCheck || 5; //same
    Allowance = _Allowance || 0; //same

    //Calculate:
    var x = x1 - x2;
    var y = y1 - y2;
    var m = y / x;

    /* rest of your code */
}

请注意,赋值
variable=var1 | | var2
意味着如果
var1
未定义,则设置为等于
var2

如果需要发送变量的可选默认值-如您在注释中所述-则使用此结构:

假设我们希望
xToCheck、yToCheck、amount
是可选的:

ST.PT.isMouseOnLine = function (x1, y1, x2, y2, _xToCheck, _yToCheck, _Allowance)   {

    //Get the variables:
    xToCheck = _xToCheck || 5; //replace value with default value or variable.
    yToCheck = _yToCheck || 5; //same
    Allowance = _Allowance || 0; //same

    //Calculate:
    var x = x1 - x2;
    var y = y1 - y2;
    var m = y / x;

    /* rest of your code */
}
请注意,赋值
variable=var1 | | var2
意味着如果
var1
未定义,则设置为等于
var2

您可以使用该对象迭代传递给函数的所有参数。这样,您只需删除最后3个参数(xToCheck、yToCheck和allowment)并迭代结果值以填充动态X和Y数组,如下所示:

function arbitraryArguments() {
    // first, convert function arguments into an array
    var args = Array.prototype.slice.call(arguments);

    // then get the last 3 arguments, which are always present
    var
        Allowance = args.pop(),
        yToCheck  = args.pop(),
        xToCheck  = args.pop(),
        x         = [],
        y         = [];

    // ... and fill-in the X and Y arrays from what's left
    for (var i in args) {
        if (i % 2) {
            y.push(args[i]);
        } else {
            x.push(args[i]);
        }
    }

    // ... do whatever you need with all the X and Y values
    //     in these x and y arrays

    for (var a in x) {
        console.log('x' + a + ' = ' + x[a]);
        console.log('y' + a + ' = ' + y[a]);
    }

    console.log('Allowance = ' + Allowance);
    console.log('yToCheck = ' + yToCheck);
    console.log('xToCheck = ' + xToCheck);
}

arbitraryArguments(1, 2, 3, 4, 5, 6, 7, 8, 111, 222, 1010);
jsiddle:

您可以使用对象来迭代传递给函数的所有参数。这样,您只需删除最后3个参数(xToCheck、yToCheck和amount),然后迭代结果值以填充动态X和Y数组,如下所示:

function arbitraryArguments() {
    // first, convert function arguments into an array
    var args = Array.prototype.slice.call(arguments);

    // then get the last 3 arguments, which are always present
    var
        Allowance = args.pop(),
        yToCheck  = args.pop(),
        xToCheck  = args.pop(),
        x         = [],
        y         = [];

    // ... and fill-in the X and Y arrays from what's left
    for (var i in args) {
        if (i % 2) {
            y.push(args[i]);
        } else {
            x.push(args[i]);
        }
    }

    // ... do whatever you need with all the X and Y values
    //     in these x and y arrays

    for (var a in x) {
        console.log('x' + a + ' = ' + x[a]);
        console.log('y' + a + ' = ' + y[a]);
    }

    console.log('Allowance = ' + Allowance);
    console.log('yToCheck = ' + yToCheck);
    console.log('xToCheck = ' + xToCheck);
}

arbitraryArguments(1, 2, 3, 4, 5, 6, 7, 8, 111, 222, 1010);


JSFIDLE:

“我想要的是它接受这个函数”-嗯?我想要的是使它动态化我们的需求一点也不清楚!你的意思是你想要发送变量的可选默认值吗???@newuser1添加了一个答案,解释了一种使一些输入值可选的可能方法。“我想要的是它接受这个函数”-嗯?我想做的是使其动态化我们的需求一点也不清楚!你的意思是你想要发送变量的可选默认值吗???@newuser1添加了一个答案,解释了一种使某些输入值可选的可能方法。你能演示一下上面的代码吗?我非常感谢。@newuser1我不确定这是你想要的寻找,只是猜测。如果我的猜测是正确的,我可以提供更多的细节,但首先你应该清楚地定义你的问题。为什么你想让函数接受更多的参数?当前的结果是什么,修改后的预期结果是什么?我想让我的函数接受更多的参数,以便它可以处理整个va集r上面代码中的哪个没有处理。你能演示一下上面的代码吗?我会非常感激的。@newuser1我不确定这是你想要的,只是猜测。如果我的猜测是正确的,我可以提供更多细节,但首先你应该清楚地定义你的问题。为什么你想让函数接受更多参数?什么这是当前的结果,修改后的预期结果是什么?我希望我的函数接受更多的参数,这样它就可以处理上面代码中没有处理的整个变量集。你能详细说明一下吗?事实上,我不确定你想要什么。也许你先详细说明一下。你能详细说明一下吗?事实上,我不确定你想要什么“
ArbirayArguments()
函数只是您自己的
ST.PT.isMouseOnLine()
函数的重写,其功能已被删除(替换为“/…对这些X和Y数组中的所有X和Y值执行所需操作”注释)仅供参考,JavaScript知识是应用JavaScript原则所必需的,StackOverflow不是一个为您寻找免费开发人员力量的地方-我们的答案是帮助您前进,而不是为您编写程序。
ArbirayArguments()
函数只是您自己的
ST.PT.isMouseOnLine()的重写
功能已删除的函数(替换为“/…对这些X和Y数组中的所有X和Y值执行所需操作”注释)仅供参考,JavaScript知识是应用JavaScript原则所必需的,StackOverflow不是一个为您找到免费开发人员的地方——我们的答案是帮助您前进,而不是为您编写程序