2016-09-20 6 views
1

Ich versuche, eine große Reihe von Daten zu durchsuchen, die eine Datumsspalte verwenden, um das Array der Konten zurückzugeben, die das Datum haben, das ich benötige. Ich kann das Array nicht mit Daten füllen. Was vermisse ich?array.filter gibt Array nicht zurück

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

was _is_ array.filter zurückgibt? Was enthält die Variable "accounts"? Stellen Sie sicher, dass Sie ein [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) bereitstellen. – Hamms

+0

Haben Sie versucht, die Funktion 'rowNumber2' aufzurufen? => accounts.filter (rowNumber2()); ' – Davion

+1

@Davion Das wäre ein boolescher Wert; 'filter' nimmt eine Funktion an. 'rowNumber2' selbst sollte übergeben werden. – qxz

Antwort

1

Sie können === nicht verwenden, um neue Objektinstanzen zu vergleichen. Zwei Objekte, die mit new erstellt wurden, werden sich nie gegenseitig ===, auch wenn sie die gleichen "Werte" haben, wie das gleiche interne Datum. This question zeigt den richtigen Weg für genaue Datum Anpassung zu überprüfen:

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

Denken Sie daran, dies wird nur funktionieren, wenn die Zeiten sind genau:

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

Also Ihr rowNumber2 Filter etwas mehr wie zurückgeben soll passend. Wenn der Filter immer noch einen leeren Wert anzeigt, loggen Sie beide Daten ein, um zu sehen, ob sie genau die gleiche Zeit haben.

Verwandte Themen