2016-09-20 2 views
1

Я пытаюсь выполнить поиск по большому массиву данных с использованием столбца даты, чтобы вернуть массив учетных записей, которые имеют нужную мне дату. Я не могу заставить массив заполнять любые данные. Что мне не хватает?array.filter not возвращающий массив

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(); 

Имейте в виду, что это будет работать только в том случае, если времена точно соответствия. Если фильтр по-прежнему показывает пустое значение, запишите обе даты, чтобы убедиться, что они действительно сохраняют то же самое время.

Смежные вопросы