我手头有一个奇怪的问题。我的代码中有一个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()
功能不起作用。我做错了什么?
答案 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指出我正确的方向。