Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从映射返回值_Javascript_D3.js - Fatal编程技术网

Javascript 从映射返回值

Javascript 从映射返回值,javascript,d3.js,Javascript,D3.js,我有一个源于D3V3的脚本,我正试图在V5中重建它 我先看一下代码,然后再看问题。这是代码的相关部分 var height = 570 var width = 510 var svg = d3.select("#chart").append("svg") .attr("width", width + 160) .attr("height", height + 90) .append("g") .attr("transform", "translate(" + 1

我有一个源于D3V3的脚本,我正试图在V5中重建它

我先看一下代码,然后再看问题。这是代码的相关部分

var height = 570
var width = 510

var svg = d3.select("#chart").append("svg")
    .attr("width", width + 160)
    .attr("height", height + 90)
    .append("g")
    .attr("transform", "translate(" + 160 + "," + 90 + ")");

// this has a count for how many are in each group
var grpcnts = {
    met: { '1960': 0, '1970': 0, '2010': 0, label: "First Met", x: 1, y: 1 },
    romantic: { '1960': 0, '1970': 0, '2010': 0, label: "Romantic", x: 2, y: 1 },
    lived: { '1960': 0, '1970': 0, '2010': 0, label: "Live Together", x: 3, y: 1 },
    married: { '1960': 0, '1970': 0, '2010': 0, label: "Married", x: 4, y: 3 },
}

var x = d3.scaleBand()
    .domain([1950, 1970, 1980, 2010])
    .range([0, width]);

var y = d3.scaleBand()
    .domain(d3.keys(grpcnts))
    .range([height, 0]);

var sched_objs = [],
    curr_index = -1;

// Load data 
d3.tsv("timelines.tsv")
    .then(function(data) {

    data.forEach(function(d) {
        var day_array = d.timeline.split(",");
        var activities = [];
        for (var i=0; i < day_array.length; i++) {
            // Duration
            if (i % 2 == 1) {
                activities.push({'act': day_array[i-1], 'duration': +day_array[i]});
            }
        }
        sched_objs.push(activities);
    });

    // A node for each person's schedule
    var nodes = sched_objs.map(function(o,i) {
          var act = o[0].act;
          var init_x = x(+data[i].decade) + Math.random();
          var init_y = y('met') + Math.random();
          var col = "#cccccc";
          grpcnts[act][data[i].decade] += 1;

        return {
      act: act,
      radius: maxRadius,
      x: init_x,
      y: init_y,
      decade: data[i].decade,
      color: color(act),
      married: false,
      moves: 0,
      next_move_time: o[0].duration,
      sched: o
        }
      });
    }) // end tsv
问题是
x
y
字段显示为
NaN

我在return子句之前添加了
console.log
语句,init_x和init_y值打印出正确的数字

我已经用所有有效的输入测试了
x()
y()
函数,它们返回了正确的值。我已经测试了
Math.random()
,看起来效果不错


其他字段都没有显示为
NaN
,这让我相信返回多个值的语法是正确的。我还尝试将
init_x
init_y
包装在Number()中。

不幸的是,您的代码充满了错误,以至于我们无法在不进行重大重构的情况下运行它

但是,为了回答您当前的特定的问题(“NAN来自哪里?”),这就是问题所在(您的报告中的第212行):

由于没有
alpha
,而是
alpha()

o.x += (x(+o.decade) - o.x) * k * damper;
。。。你会得到一个漂亮的NaN


我想再次强调,这一更改不会使代码正常工作,您还有许多其他问题需要解决。

Hmm,我在运行此操作时得到x,y值()-我在其中更改了一些内容以进行测试:我从页面本身将tsv解析为csv,并且我没有执行色标(因为您没有包含它),任何变化都不应影响结果。您是否将
节点
传递给布局输出生成器或强制模拟,这可能会覆盖这些属性(查看您在登录map函数时如何获得正确的值,这似乎是最有可能的)?我将其传递给一个
强制
变量,该变量可能会覆盖它。不过我还是有些犹豫,因为我在代码片段之后就使用了
console.log
,所以我不知道它是否会被覆盖。此处显示了
force
语句。我还使用
var pymChild=new pym.Child()。也许我应该试着只使用该部分运行它,然后一次添加一个其他部分,直到它中断。强制布局将为节点数组中的每个对象设置x和y属性。明天早上我会仔细查看粘贴箱代码。
var k = 0.03 * this.alpha;
o.x += (x(+o.decade) - o.x) * k * damper;