Javascript Mathjs自定义和函数
我正在尝试实现自己的自定义求和函数。 目标是拥有一个名为“sumFromTo”的函数,该函数接受4个参数 *迭代名 *从 *到 *作用 其中“函数”可以是其他函数,解决方案是求和所有函数。 比如说Javascript Mathjs自定义和函数,javascript,mathjs,Javascript,Mathjs,我正在尝试实现自己的自定义求和函数。 目标是拥有一个名为“sumFromTo”的函数,该函数接受4个参数 *迭代名 *从 *到 *作用 其中“函数”可以是其他函数,解决方案是求和所有函数。 比如说 // works sumFromTo(i,1,10,i+1) // = 65 但是如果我把它包装到另一个函数中,它就会中断,因为mathjs不知道“x” 我的导入如下所示: function sumFromTo(iteratorName, from, to, toString, f) {
// works
sumFromTo(i,1,10,i+1) // = 65
但是如果我把它包装到另一个函数中,它就会中断,因为mathjs不知道“x”
我的导入如下所示:
function sumFromTo(iteratorName, from, to, toString, f) {
var total = 0;
var toVal = typeof to == "number" ? to : to.length;
for (var iterator = from; iterator <= toVal; iterator++) {
mathScope[iteratorName] = iterator;
mathScope[toString + "_" + iterator] = to[iterator];
total += math.eval(f, mathScope);
}
return total;
}
sumFromTo.transform = function (args, math, scope) {
/* Iterator */
var iteratorName = "notfound";
if (args[0] instanceof math.expression.node.SymbolNode) {
iteratorName = args[0].name;
} else {
throw new Error('First argument must be a symbol');
}
/* Startvalue of Iterator */
if (args[1] instanceof math.expression.node.ConstantNode) {
if (args[1].value == 0) {
throw new Error('Sum must counting from >=1: 0 given');
}
}
/* to: Array to loop */
if (args[2] instanceof math.expression.node.SymbolNode) {
var toString = args[2].name;
}
/* compile */
var from = args[1].compile().eval(scope);
scope[iteratorName] = from;
var to = args[2].compile().eval(scope);
if (to.constructor.name == "Matrix") {
to = to.toArray();
scope[toString] = to;
}else{
if(typeof to == "object"){
to = to.toArray();
}
}
return sumFromTo(iteratorName, from, to, toString, args[3].toString());
};
sumFromTo.transform.rawArgs = true;
math.import({sumFromTo: sumFromTo}, {override: true});
函数sumFromTo(iteratorName,from,to,toString,f){
var合计=0;
var toVal=typeof to==“number”?to:to.length;
对于(var iterator=from;iterator您需要的是闭包
test = function(x) {
sumFromTo(i,1,x,i+1)
}
test(10)
你需要的是结束
test = function(x) {
sumFromTo(i,1,x,i+1)
}
test(10)
谢谢你的回答,但我忘了说,这是一种math.js输入。它是用户生成的,来自前端。我可以创建一个名为“test”的静态函数在我的.js文件中。但这不是我想要的。我正在寻找一种动态方式来定义这个函数。thx作为你的答案,但我忘了说,这是一种math.js输入。它是用户生成的,来自前端。我可以创建一个名为“test”的静态函数在我的.js文件中。但这不是我想要的。我正在寻找一种动态的方法来定义这个函数。