对不起,如果我的问题标题看起来与我的问题不同。我找不到正确的词,但这是我的问题:
让我们说有一个这样的功能:
function sum (a, b){
return a+b;
}
不是像这样用两个数字求和
const t = sum (2, 3);
如果可能,我想这样使用:
var s = "2, 3";
const t = sum (s);
谢谢。
答案 0 :(得分:3)
您必须split()
字符串,以便可以使用 index 从生成的数组中获取数字。
请注意:在执行算术运算之前,必须将数字的字符串表示形式转换为数字。否则将发生字符串连接。
function sum (str){
str = str.split(',')
var a = Number(str[0]), b = Number(str[1]);
return a+b;
}
var s = "2, 3";
const t = sum (s);
console.log(t);
如果您不想更改函数,请从字符串中获取数字并将其传递给函数:
function sum (a, b){
return a+b;
}
var s = "2, 3";
s = s.split(',');
var x = Number(s[0]), y = Number(s[1]);
const t = sum (x, y);
console.log(t);
答案 1 :(得分:1)
您可以使用split()
来做到这一点:
const t = (s) => Number(s.split(',')[0]) + Number(s.split(',')[1]);
var s = '2, 3';
console.log(t(s));
在这里,split()
函数采用参数string
,return
是list
,其中包含由给定参数分割的段。
Number
函数采用string
,return
分别是int
中的值,因为如果我们采用这样的string
值:
'2' + '3'
然后,输出将是我们不需要的'23'
(字符串串联)
如前所述,如果您无法更改函数sum
,则可以使用这种方法(通过创建另一个新函数来实现):
// sum function definition without alteration.
function sum (a, b){
return a+b;
}
// New function
const t = (s) => sum(Number(s.split(',')[0]), Number(s.split(',')[1]));
var s = '2, 3';
console.log(t(s));
答案 2 :(得分:0)
function sum (a, b){
return a+b;
}
var s = "2, 3";
var arrOfNums = s.split(",").map(d => +d);
const t = sum(...arrOfNums);
console.log(t); //5
如果您不想更改您的方法,可以查看上述替代方法。这里:
1.首先,我使用','分割字符串,得到Array('1','3'),然后使用array's map method创建新数组,并调用提供的箭头(d => + d )函数应用于数组的每个元素,d => +d
为每个元素运行,并使用JavaScript的Unary Plus operator将字符串转换为整数。
arrOfNums[0]
和arrOfNums[1]
来代替扩展语法。答案 3 :(得分:0)
您可以尝试
function sum (a, b){
return a+b;
}
var string = "2, 3";
var arr = string.split(",").map(Number);
const t = sum(...arr);
console.log(t);
答案 4 :(得分:0)
另一种可能的解决方案可能是使用eval
:
var s = '2, 3';
function sum(a, b){
return a+b;
}
console.log(eval(`sum(${s})`)); // <-- similar to sum(s);
诚然,这不是最好的解决方案。如果s
是从第三方来源提供的(即通过用户输入),请不要使用此解决方案,因为恶意代码可以注入s
的值中并运行。
另外,eval
是运行时昂贵的函数。因此,您可以改用window.Function
:
const s = '2, 3';
const sum = function(a, b) {
return a + b;
}
const functionCall = `sum(${s})`; // <-- similar to sum(s);
const res = Function('return ' + functionCall)();
console.log(res);
这提供了一种评估方法,该方法比evel
快得多,但是它具有漏洞。