为什么我的push()函数不起作用?

时间:2017-03-20 19:30:58

标签: javascript meteor foreach

我手头有一个奇怪的问题。我的代码中有一个push()函数似乎不起作用。有人可以告诉我我的代码有什么问题吗?

var viewStatisticsArray= [];

var viewStatistics = buyList.find("Pq9Kgrd4Haa5vjQov");

viewStatistics.forEach(function(itemName){
  viewStatisticsArray.push({statesDate: Date(), nrOfViews: itemName.noOfViews});
  console.log("Item Stats is: " ,...viewStatisticsArray); 
});

控制台打印出以下内容。

  

物品统计数据为:物件{statesDate:“Mon Mar 20 2017 22:19:28 GMT + 0300(EAT)”,nrOfViews:2}

请指出为什么push()功能不起作用。我做错了什么?

2 个答案:

答案 0 :(得分:2)

这段代码看起来完全正是写下来的。

var viewStatisticsArray= [];

var viewStatistics = buyList.find("Pq9Kgrd4Haa5vjQov");

viewStatistics.forEach(function(itemName){
  viewStatisticsArray.push({statesDate: Date(), nrOfViews: itemName.noOfViews});
  console.log("Item Stats is: " ,...viewStatisticsArray); 
});

当执行代码片段时,viewStatisticsArray为空,然后您只需要向数组中添加1个项目,因为buyList.find()只会返回带有1个记录的游标(因为您传递的是_id到Meteor Collection.find方法)。

当它再次运行时,数组被重新设置为一个空数组(例如var viewStatisticsArray= []),它再次将一条记录推入数组。

由于您提到您希望数组随着时间的推移而增长,因此这意味着您需要保留数据。如果你想在viewStatisticsArray中保存数据(这样它的长度会随着时间的推移而增长),那么你必须在别处(在这个片段范围之外的某个地方)定义这个数组,并确保不要重新分配给var运行时的空数组(就像你现在正在做的那样)。

答案 1 :(得分:0)

似乎push()函数仅在存在包含内容的现有数组时才附加到数组。由于附加到数组是我的意图,我得到了现有数组的内容,然后使用push()函数附加

var viewStatisticsArray= [];
var viewStatistics = buyList.find("Pq9Kgrd4Haa5vjQov");

viewStatistics.forEach(function(itemName){

viewStatisticsArray = [,...itemName.viewStatisticsArray];

上面的代码使用初始数组内容填充 viewStatisticsArray 数组,而下面的代码附加到 viewStatisticsArray 数组。

 viewStatisticsArray.push({statesDate: Date(), nrOfViews: itemName.noOfViews});  
    });

感谢@ jordanwillis指出我正确的方向。