如何使用一个字符串作为参数执行带有两个参数的函数?

时间:2018-12-09 05:01:59

标签: javascript string

对不起,如果我的问题标题看起来与我的问题不同。我找不到正确的词,但这是我的问题:

让我们说有一个这样的功能:

function sum (a, b){
      return a+b;
}

不是像这样用两个数字求和

const t = sum (2, 3);

如果可能,我想这样使用:

var s = "2, 3";
const t = sum (s);

谢谢。

5 个答案:

答案 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()函数采用参数stringreturnlist,其中包含由给定参数分割的段。

Number函数采用stringreturn分别是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将字符串转换为整数。

  1. 第二,我使用Array spread 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快得多,但是它具有漏洞。