首页 > 解决方案 > 从数组元素创建 js 语句

问题描述

总菜鸟。尝试扩展一些代码以使其更灵活。我已经设法将我需要的语句的“部分”放入一个数组中。但是现在我想让语句运行,我不知道如何分块并做出一个被评估的语句。

<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]),但我觉得我只是在黑暗中刺伤

标签: javascriptjquery

解决方案


暗中捅刀子确实不是编程之道!

其实你离得并不远。[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);。老实说,这无论如何都会更整洁。


推荐阅读