Javascript selection.data返回不同类型的对象

Javascript selection.data返回不同类型的对象,javascript,d3.js,web-inspector,Javascript,D3.js,Web Inspector,每次循环,我都会对特定的对象选择执行一些更新(请参见下面的代码片段),首先使用exit()调用删除删除的元素。我只是添加了一个滑块来修改其中一个对象中的参数,当滑块移动时,我调用相同的更新方法(同样使用下面的代码)。但是,当滑块触发更新时,选择是不同的。。。特别是,exit()方法失败--TypeError:selection.exit不是一个函数(也是这个问题的原因) 当我将选择记录到控制台时,内容基本相同。。。但是对象类型似乎有些不同,或者类似的东西。请参见下面的屏幕截图。选择的第一个打印输

每次循环,我都会对特定的对象选择执行一些更新(请参见下面的代码片段),首先使用
exit()
调用删除删除的元素。我只是添加了一个滑块来修改其中一个对象中的参数,当滑块移动时,我调用相同的更新方法(同样使用下面的代码)。但是,当滑块触发更新时,选择是不同的。。。特别是,
exit()
方法失败--
TypeError:selection.exit不是一个函数(也是这个问题的原因)

当我将
选择记录到控制台时,内容基本相同。。。但是对象类型似乎有些不同,或者类似的东西。请参见下面的屏幕截图。
选择的第一个打印输出(“sel=[…])是在工作正常时。下一次出现错误时,打印的格式会有所不同——尽管它似乎包含相同的基本数据

  • 为什么
    selection.data()
    在不同的上下文中调用时返回不同类型的对象

  • console.log
    输出中的区别是什么:什么是
    pt
    (在输出中)以及这里打印的对象的不同类型是什么

注意:我理解如果这个非MWE不足以完全解决问题,这就是为什么我试图问一些具体的(子)问题,这些问题可能会帮助我找到问题,尽管如此


数据看起来像

var phaseInit = Math.random();
var binary = [
    {name: "a", phase: phaseInit, mass: m1},
    {name: "b", phase: phaseInit + 0.5, mass: m2}
];
当滑块移动时,我会修改数据,如:

binary[0].mass = sliderScaleM1.invert(sval);
(javascipt和d3非常新)


由于我们无法访问MWE(),因此这是一个试图根据提供的信息澄清问题的一般答案

在D3中,
data()
方法接受三件事:

  • 阵列
  • 函数
  • 没什么
  • 在第一种和第二种情况下,
    data()
    是一个设置程序。但是,在第三种情况下,
    data()
    是一个getter

    我们可以在一个基本示例中看到这一点:

    var body=d3.选择(“body”);
    var数据=[“foo”、“bar”、“baz”];
    var sel=body.selectAll(空)
    .数据(数据);
    选择输入()
    .附加(“p”)
    .html(字符串)
    控制台日志(sel)

    为什么不创建一个代码段(即
    按钮),用一个基本示例再现问题?现在很难说您是如何绑定数据和更新选择的。@GerardoFurtado感谢您的关注。如果需要的话我会试试。。。但是,如果不包含整个(数千行)文件,生成一个MWE将非常困难。我希望有人能够根据给定的信息或我可以更容易地提供的其他特定信息(例如,我试图包括数据是如何更改的)识别此类问题。。。如果不是这样的话:那么我肯定必须更加努力地制作MWE。控制台(19:57:07)中的第一个
    sel
    是D3选择。然而,第二个(19:57:12)只是一个数组,更具体地说是数据数组。您如何在它们之间更改
    sel
    ?这里缺少一些信息,你看到了吗?我的猜测是,您正在使用
    data
    作为getter(
    data()
    ),而它应该是setter(
    data(binary)
    )。@GerardoFurtado好的,我会在MWE上更加努力。但是上面显示了打印
    sel=
    的代码,并且
    selection
    在两个调用中的定义方式相同。。。第二次,
    selection.data(…)
    返回的是数组而不是选择。是否有特定的时间会发生这种情况?正如我上面所说,您是使用
    数据
    作为获取者还是设置者?如果您使用的是
    var selection=svgSim.selectAll(“.bh”).data()你再也没有D3 SelectiOn了。
    
    binary[0].mass = sliderScaleM1.invert(sval);