2016-09-20 99 views
1

我正在嘗試使用日期列來搜索大量數據以返回具有所需日期的帳戶數組。我無法讓數組填充任何數據。我錯過了什麼?array.filter不返回數組

var accounts = accountInfo.getRange('A2:AJ').getValues(); 
var maxRow = accountInfo.getMaxRows(); 
var today = new Date(); 
today.setHours(0,0,0,0); 
var todayPlus5 = addDays(today, 5); 

function reviewPriorityFilter(){ 
    var filtered = accounts.filter(rowNumber2); 
    accounts = filtered; 
    Logger.log(filtered); 
} 

function rowNumber2(value){ 
    var fix = new Date(value[15]); 
    fix.setHours(0,0,0,0); 
    return fix === todayPlus5; 
} 

function addDays(date, days){ 
    var result = new Date(date); 
    result.setDate(result.getDate() + days); 
    return result; 
} 
+1

什麼是_is_ array.filter返回?變量'accounts'包含什麼?請確保提供了[最小,完整和可驗證的示例](http://stackoverflow.com/help/mcve) – Hamms

+0

您是否嘗試過調用'rowNumber2'函數? =>'accounts.filter(rowNumber2());' – Davion

+1

@Davion這將是一個布爾值; 'filter'具有一個函數。 'rowNumber2'本身應該被傳遞。 – qxz

回答

1

您不能使用===來比較新的對象實例。使用new創建的兩個對象絕不會彼此對立,即使它們具有相同的「值」,例如相同的內部日期。 This question顯示了適當的方式來檢查確切的日期匹配:

date1.getTime() === date2.getTime() 

所以你rowNumber2過濾器應返回更多的東西一樣:

return fix.getTime() === todayPlus5.getTime(); 

請記住這一點,如果時間都是正是只會工作匹配。如果過濾器仍顯示空值,請記錄兩個日期以查看它們是否確實保持完全相同的時間。