【问题标题】:How to overwrite the array inside a function?如何覆盖函数内的数组?
【发布时间】:2017-05-29 23:56:40
【问题描述】:

我在 D3.js 中有一个问题。 我可以点击圈子并与他们互动。 为了实现这一点,我定义了一个名为

的数组
var array123

在功能内点击圆圈。现在有了这个数组,我可以在其中保存设置,例如更改更多圆圈的大小或颜色。 函数如下所示:

      circle.on("click", function (d) {

        var array123 = start && start.path(d) || []
    link.style("stroke", function(d) 
                    {
                      return array123.includes(d.source) && array123.includes(d.target) ? "red" : "green";   
                    });
start = d
        .....}

我现在的问题是,一旦单击一个圆圈,这些设置就会保存,并在再次单击其他圆圈时得到更新。 问题是,如何从外部重置阵列的内存?例如,我可以创建一个矩形,当我点击它时,它会重置array123 的所有内存?我尝试使用具有确切名称 (array123) 的数组来执行此操作,但我不会覆盖第一个。

【问题讨论】:

  • 无法弄清楚你真正在问什么(你可能不得不编写一个最小的 jsfiddle 或 plunker 来演示)。 但是我可以告诉你,在你的点击回调中声明 var array123 = [] 会使变量 array123 作用于该函数并且在它之外不可用。
  • 我强烈推荐你read and understand this
  • 谢谢马克,清空数组似乎不起作用,你能帮帮我吗?我用rectangle.on("click", function (d) { array123 = [];
  • 再一次,虽然我猜你有范围问题,但你需要编写一个代码来编写一个最小的 jsfiddle 或 plunker 来展示你的麻烦。我不明白你在做什么。
  • 嘿,马克,我很乐意,我的 Plunker 出了问题。我试图从记事本++中复制并粘贴它,但它没有用。我稍后会在 JSfiddle 上重试。

标签: javascript jquery arrays d3.js overwrite


【解决方案1】:

在该函数之外声明数组变量,如下所示:

var array123; circle.on("click", function (d) { array123 = start && start.path(d) || []; code to maipulate and save the array .....}

然后您可以在范围内的任何其他位置使用相同的变量。通过在内部声明一个变量,您限制了范围。

【讨论】:

  • 谢谢大家,我刚刚编辑了上面的代码...@vignesh:我尝试了您的建议,但结果是,我不会再更改链接颜色了。说明: d3 中的力图,带有圆圈和链接。我可以单击 2 个圆圈并突出显示它们之间的路径(链接的颜色)。这就是我使用var array123 = start && start.path(d) || []的原因,那个start.path(d)是D3.js的一个函数,它返回第一个点击的圆圈(开始)和第二个点击的圆圈(d)之间的最短路径。跨度>
  • @DerickKolln:编辑了我的答案。这对你有用。
  • 哇,这真的很有效,感谢 Mark 和 Vignesh。一个问题:为什么在点击功能之外使用var array123 = start && start.path(d) || []时它不起作用?是因为start.path()函数吗?
  • @DerickKolln:您不能在该函数之外使用它,因为参数“d”在函数外部未定义,并且仅在单击事件发生时出现。
  • @DerickKolln:你不能那样做。这是解决此问题的唯一方法,即使您在外部定义 d,该 d 和触发 onclick 的变量“d”也会不同。这里的变量 d 是事件对象。您必须学习更多的 javascript 基础知识才能更好地理解这一点。
猜你喜欢
  • 1970-01-01
  • 2013-04-08
  • 1970-01-01
  • 2021-01-09
  • 1970-01-01
  • 2011-07-21
  • 2016-05-04
  • 2012-10-16
相关资源
最近更新 更多