控制台输出不显示数组元素的数量。代码中无法访问的数组元素

Posted

技术标签:

【中文标题】控制台输出不显示数组元素的数量。代码中无法访问的数组元素【英文标题】:Console output does not show number of elements of array. Array Elements not accessible in code 【发布时间】:2019-01-19 21:49:21 【问题描述】:

我在这方面浪费了几个小时,但无法找到这个问题的答案。

代码如下:

export const fetchZoneSlots = (name, startDate) => async dispatch => 

  var zoneSchedule=[], promises=[], temp=[],i,j;
  try 

    for(i=0;i<7;i++)

      const response = await axios.post(
        'http://localhost:3090/zoneslots',
        name, date: startDate
      );

      promises.push(response);

      startDate= moment(startDate,'YYYY-MM-DD').add(1,'day').format('YYYY-MM-DD');
    

    axios.all(promises).then(function(results) 
      results.forEach(function(response) 
          temp.push(response.data);
      );
    );
    console.log(temp);

    dispatch( type: ZONE_CHANGE, payload: temp );
   catch (e) 
    dispatch( type: ZONE_ERROR, payload: 'Zone information cannot be fetch' );
  
;

在上面的代码中,我以对象数组的形式获取数据并将这个数组推送到temp 变量中以创建一个矩阵(2D 数组)。现在我想转置这个矩阵。但是,控制台上没有temp[i]temp[i][j] 的输出。

换句话说,我无法访问数组的各个元素。但是,有一个temp 的输出,我在代码中有console.log,如下图所示。

正如您在图像中看到的,控制台上没有显示元素的数量,它只显示Array [] 而不是Array(7) [..]

但是,如果您注意到我在dispatch() 中将相同的变量(即temp)作为值传递给了我的payload。现在,当我控制台记录我的组件道具时,它会正确地将 Array(7) [ (14)[..], ... ] 显示为 zoneSchedule 属性的值。

所以,我想知道为什么我无法在给定的代码中访问/迭代数组,或者为什么控制台中没有显示元素的数量,即使它包含元素并且设置了长度属性。为什么相同的传递数组出现在其他对象属性上,但是当我将temp 分配给我的action creator 代码中的任何其他变量时,同样的事情不起作用。

我想在通过之前调换温度。

提前感谢您的帮助。

【问题讨论】:

您在“then”之外进行控制台输出。数据还没有。但是,当您在控制台日志中展开阵列时,数据已到达。当你输出一个指向对象的指针时,它的内容可能会改变。 【参考方案1】:

await 放在axios.all(...).then(...) 之前等待所有的承诺,然后再进行调度:

await axios.all(promises).then(function(results) 
  results.forEach(function(response) 
      temp.push(response.data);
  );
  return;
);

【讨论】:

以上是关于控制台输出不显示数组元素的数量。代码中无法访问的数组元素的主要内容,如果未能解决你的问题,请参考以下文章

编写程序将一个数组中的数按逆序重新存放并输出(程序中数组的元素个数自定,逆序

从不同功能但相同类访问数组元素

AngularJS 中的数独

28:出现次数超过一半的数

C#中,如何让一个变量值不等于指定的两个值

判断一个数能否通过一个数组中的数相乘而得到(数组中的数使用次数不限)