【问题标题】:Javascript array.length returns 0 after .push() in d3.csv() functionJavascript array.length 在 d3.csv() 函数中的 .push() 之后返回 0
【发布时间】:2019-11-15 12:55:54
【问题描述】:
 const disorders=[];
    const arr = [1,2,3,4,5];
    d3.csv("https://gist.githubusercontent.com/victoirebeaufils/bdc33d6da0fb98eacf4b6c7d630c280b/raw", function(data){
        const disorder = data.disorder;
        disorders.push(data.disorder);

   });

  console.log(disorders)
  console.log(disorders.length)
  console.log(arr)

当我展开 [] 选项卡时,我的数组在控制台中显示长度为 5,但 disorder.length 返回 0,我无法访问任何元素。

第一个数组效果很好,还可以显示元素的数量以及数组中的元素,而无需展开选项卡。我不确定这意味着什么或如何解决它,以便第二个正常工作。

【问题讨论】:

  • d3.csv() 是一个异步函数。如果你在回调函数中记录长度,你会发现它有效。
  • 数据没有准备好。当您记录障碍时,该功能仍在运行。使用回调或承诺

标签: javascript arrays d3.js


【解决方案1】:

由于 d3.csv() 异步工作,因此您需要一个回调函数:

例如:

const disorders=[];
const arr = [1,2,3,4,5];

function execute(callback) {
   d3.csv("https://gist.githubusercontent.com/victoirebeaufils/bdc33d6da0fb98eacf4b6c7d630c280b/raw", function(data){
     const disorder = data.disorder;
     disorders.push(data.disorder);
     callback(disorders);
   });
}

execute(function(result) {
   console.log(result)
   console.log(result.length)
   console.log(arr)
});

【讨论】:

  • 感谢您的解释。我正在使用 React,我希望将 disorder 数组传递到要在该组件中使用的组件的属性中。我想知道是否有一种方法可以像在回调函数中那样访问组件中的数组和 array.length。我似乎无法访问它们,并且 array.length 返回 0。
猜你喜欢
  • 1970-01-01
  • 2017-07-08
  • 2020-07-19
  • 1970-01-01
  • 1970-01-01
  • 2016-07-21
  • 2013-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多