将字符串传递给Function.prototype.apply()JavaScript

时间:2017-06-02 15:22:29

标签: javascript regex

我目前需要将一组函数参数定义为逗号分隔的字符串,并在以后传入。

我希望我的代码功能如下。

function bar() {
    console.log("My name is " + arguments[0].name + " and my species is " arguments[0].species);
    console.log("String 1: " + arguments[1]);
    console.log("String 2: " + arguments[2]);
}

function foo() {
    var args = "{name: 'Dean Brunt', species: 'Human'}, 'A string', 'Some other input string, oh yes'";
    bar.apply(null, args);
}

我希望这能产生输出到控制台:

My name is Dean Brunt and my species is Human
String 1: A string
String 2: Some other input string, oh yes

然而,这不起作用,因为Function.prototype.apply()将数组作为其“'第二个论点。虽然,我已经尝试将args字符串转换为数组,但由于这会产生非平凡的正则表达式分裂,我一直在努力解决这个问题,而且我的尝试也毫无结果。

任何人都可以帮我定义一个合适的正则表达式对象,我可以用它来进行拆分,或者提出一个可以产生相同结果的替代方法。

非常感谢。

3 个答案:

答案 0 :(得分:1)

它不漂亮,但您可以使用eval

function bar() {
    console.log("My name is " + arguments[0].name + " and my species is " + arguments[0].species);
    console.log("String 1: " + arguments[1]);
    console.log("String 2: " + arguments[2]);
}

function foo() {
    var args = "{name: 'Dean Brunt', species: 'Human'}, 'A string', 'Some other input string, oh yes'";
    bar.apply(null, eval('[' + args + ']'));
}

foo();

答案 1 :(得分:0)

您可以使用eval()。 写一个正则表达式会非常繁琐。

function stringToArgs(str){
   return eval(`(function(){return arguments;})(${str})`);
}

function bar(arguments) {
    console.log("My name is " + arguments[0].name + " and my species is " +arguments[0].species);
    console.log("String 1: " + arguments[1]);
    console.log("String 2: " + arguments[2]);
}

function foo() {
    var args = "{name: 'Dean Brunt', species: 'Human'}, 'A string', 'Some other input string, oh yes'";
    bar(stringToArgs(args));
}

foo();

答案 2 :(得分:0)

这不是万无一失的,但这是一个开始。

您应首先将数据格式化为看起来像 JSON,然后解析它。这是最简单的方法。

class Animal {
  constructor(name, species) {
    this.name = name;
    this.species = species;
  }
  toString() {
    return `My name is ${this.name} and my species is ${this.species}.`;
  }
}

function print() {
  console.log([].slice.apply(arguments).join(' '));
}

function printEach() {
  [].slice.apply(arguments).forEach(arg => console.log(arg));
}

print(new Animal('Dean Brunt', 'Human'), 'A string', 'Some other input string, oh yes');

加成

这有点超出您所要求的范围,但如果您可以实际修改数据,这是最好的方法。

file0 = request.FILES.get('file')
buffer0 = file0.read()
print hashlib.md5(buffer0).hexdigest() //9f982242d24ab97a7254edd7e28e3921