从数组元素创建js语句

时间:2019-08-08 15:52:44

标签: javascript jquery

总菜鸟。尝试扩展一些代码以使其更加灵活。我设法将需要的语句的“片段”放入数组中。但是,现在我想让语句运行,而且我不知道该如何整理并创建一个经过评估的语句。

<div class="qvinsert" data-qvid="PQHxsX" data-app-ref="app1"></div>
var app1 = qlik.openApp('fe96772a-caa7-442d-a77f-ed68764942ec', config);

$(".qvinsert").each(function() {
  var viz = {
    v: $(this).data("qvid"),
    a: $(this).data("appRef")
  };
  console.log(viz); //{v: "PQHxsX", a: "app1"}
  app1.getObject(this, "PQHxsX") //the line I'd like to create. If I write it out like this it works.

尝试了诸如[viz.a].getObject(this,[viz.v])之类的各种事情,但我觉得自己只是在暗中刺伤

1 个答案:

答案 0 :(得分:3)

在黑暗中刺伤确实不是编程的方法!

您实际上离您不太远。 [viz.v]有一些多余的括号(您已经在此处创建了一个单元素数组)—仅viz.v已经是您要用作该函数参数的字符串。

将字符串"app1"(即viz.a的值)转换为对app1的实际引用需要花费一些额外的工作,但是由于所有全局变量都以window对象的属性,您可以使用类似数组的语法访问这些属性。

因此,再次说明,尽管仅将变量括在数组文字括号内是没有用的,但具有讽刺意味的是,它离解决方案也不远:

window[viz.a].getObject(this, viz.v);

这应该可以解决问题。

但是,如果app1不是 全局变量,而我们不能从您的问题中真正看出这一点,那么您应该考虑将其放在一个对象中,该对象可以按名称在索引中同样的方式:

var apps = {
   "app1": qlik.openApp('fe96772a-caa7-442d-a77f-ed68764942ec', config)
   // can add more possibilities here!
};

然后是apps[viz.a].getObject(this, viz.v);。老实说,这会比较整齐。