【问题标题】:Javascript: Array of Objects is returning undefined when accessing to a single Element. Even though there are 696 Objects saved in itJavascript:访问单个元素时,对象数组返回未定义。即使其中保存了 696 个对象
【发布时间】:2020-08-29 21:28:53
【问题描述】:

我是 Javascript 的初学者,所以如果这个问题有点明显,我已经很抱歉了。所以我的练习包括在 d3 的帮助下保存来自 csv 文件的信息。之后我只想显示该数组的第一个元素。

当我执行console.log(editedData) 时,它会在控制台中出现一个包含 696 个元素的数组 Array(696),但是当我尝试执行 console.log(editedData[0]) 时,控制台会显示 undefined。起初我认为这种行为是由于同步冲突而发生的,但使用 Promises 后我仍然得到相同的结果......

const editedData = [];

const organizedData = () => {
  return new Promise((resolve, reject) => {
    d3.csv("testData.csv").then(function(data){
      data.map( element => {
        const dateAndTime = element.date.split(" ");
        const dataBlock = {
          date: dateAndTime[0],
          time: dateAndTime[1],
          testInfo: element.info1,
          testInfo2: element.info2,
          testInfo3: element.info3
        }
        editedData.push(dataBlock);
      });
    });
    resolve();
  });
}

const diplayData = () => {
  //console.log(editedData) ==> Array(696)
  //console.log(editedData) ==> undefined
  console.log(editedData[0]);
}

organizeData().then(displayData());

有人可以帮我解决这个问题吗?我想知道为什么会出现这个问题,我该如何解决?

【问题讨论】:

  • displayData() 中删除括号,您在promise 完成之前立即调用该函数。
  • 我试过了,但我仍然收到undefined

标签: javascript arrays csv d3.js


【解决方案1】:

Promise.resolve() 必须有结果值。

const editedData = [];

const organizedData = () => {
  return new Promise((resolve, reject) => {
    d3.csv("testData.csv").then(function(data){
      data.map( element => {
        const dateAndTime = element.date.split(" ");
        const dataBlock = {
          date: dateAndTime[0],
          time: dateAndTime[1],
          testInfo: element.info1,
          testInfo2: element.info2,
          testInfo3: element.info3
        }
        editedData.push(dataBlock);
      });
    });
    resolve(editedData);
  });
}

【讨论】:

【解决方案2】:

您需要在 d3.csv then 函数中调用 resolve.. 就在 data.map 函数之后

【讨论】:

  • 谢谢!这解决了问题:) 我想我现在明白了问题所在。如果不在.then函数内部,那“链”过程就被打断了,对吧?
猜你喜欢
  • 1970-01-01
  • 2020-07-14
  • 1970-01-01
  • 1970-01-01
  • 2021-01-02
  • 1970-01-01
  • 2021-08-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多