如何在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不是一个为您找到免费开发人员的地方——我们的答案是帮助您前进,而不是为您编写程序