【问题标题】:D3 / JavaScript load data and return value [duplicate]D3 / JavaScript加载数据和返回值[重复]
【发布时间】:2019-07-22 06:40:29
【问题描述】:

我似乎不明白为什么我不能返回以下值。我想使用自定义颜色为条形图着色。

function farbe() {
  d3.csv("./Barchart_Farben.csv", function(data) {

    farbdat = new Array;
    for (var i = 0; i < data.length; i++) {
        farbdat.push(data[i].Farbe);
    }
      console.log(farbdat);
      return(farbdat);      
  });
  };

console.log(farbe());

输出:

未定义

Array(5) [“黄色”、“紫色”、“橙色”、“红色”、“浅黄色”]

没有返回任何东西。为什么?

// ./Barchart.csv: 
// Farbe 
// yellow
// violet
// orange
// red
// lightyellow

【问题讨论】:

  • 正如我喜欢说的,有两种类型的程序员:...以及那些不这样做的人。懂异步代码的人...
  • 谢谢,现在我有点明白是怎么回事了!
  • 那很好。请不要被我的玩笑冒犯,我从来没有故意粗鲁。我喜欢那个笑话!我在某处读过它,我不记得在哪里,但它很好地捕捉到了异步代码的本质。

标签: javascript function csv d3.js return


【解决方案1】:

return 不是函数,是语句。你应该写return farbdat 而不是return(farbdat)

【讨论】:

  • 为什么投反对票?请添加原因。
  • 谢谢,但没用。
  • 同意,return 是一个声明。但是该语句返回return 关键字后面的表达式的值。另一方面,(farbdat) 是一个完美的表达方式,与farbdat 本身基本相同。当然,它可能看起来很奇怪,这可能表明没有经验的编码人员偏离了轨道,但代码是有效的。问题是一个完全不同的问题,即异步执行。
  • @altocumulus 酷,感谢您的解释!我没看到。
【解决方案2】:

我猜d3.csv 函数没有返回任何东西。试试这个。

function farbe() {
  var returnData = [];
  d3.csv("./Barchart_Farben.csv", function(data) {

    farbdat = new Array;
    for (var i = 0; i < data.length; i++) {
      farbdat.push(data[i].Farbe);
    }
    console.log(farbdat);
    returnData = farbdat;
  });
 return returnData;
};

在循环之前,您必须检查 typeofundefined 的输入参数“数据”。

【讨论】:

  • 请告诉我投反对票的理由。将帮助我提高我的技能:)
  • 谢谢,但没用。数据类型是对象。
  • @Krisselack:现在再检查一次。我已经在函数中添加了返回。
  • 仅供参考:d3.csv 总是返回一些东西,在任何版本中(例如here)。最重要的是,您的解决方案将无法正常工作,因为 d3.csv 是异步的。
  • @Krisselack 使用此链接 - stackoverflow.com/questions/13870265/…
猜你喜欢
  • 2015-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-10
  • 1970-01-01
  • 2016-10-16
  • 2017-01-11
  • 2015-08-01
相关资源
最近更新 更多