2017-03-20 25 views
-1

我有一個奇怪的問題。我的代碼中有一個push()函數,它似乎不起作用。任何人都可以告訴我我的代碼有什麼問題嗎?爲什麼我的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: 「星期一2017年3月20日22點19分28秒GMT + 0300(EAT)」,nrOfViews:2}

請指出爲什麼push()功能沒有按沒有工作。我究竟做錯了什麼?

+1

什麼是'viewStatistics'和什麼是你的代碼中的反引號?你期望發生什麼,結果又有什麼不同? – MasterAM

+2

它正在工作。數組中有單個項目,並且日誌正在記錄它。您已經使用了spread運算符,因此數組中的每個元素都將分別打印。 –

+0

@Mike McCaughan它不像我喜歡的那樣工作。我希望每次運行腳本時都要將每個項目添加到陣列中。 – SirBT

回答

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的流星Collection.find方法)。

當它再次運行時,數組被重新設置爲一個空數組(例如var viewStatisticsArray= []),並再次將單個記錄推入數組中。

既然你提到你想要數組隨着時間的推移而增長,那麼這意味着你需要堅持數據。如果你想要在viewStatisticsArray中保存數據(這樣它的長度會隨着時間的推移而增長),那麼你必須在別處定義這個數組(在這個片段的範圍之外的地方),並且確保在var時重新分配給一個空數組這會運行(就像你現在所做的那樣)。

0

看來只有當存在帶有內容的現有數組時,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爲我指出了正確的方向。

相關問題