Как реализовать сокращение данных в Google App Script (Javascript ES5) - PullRequest
1 голос
/ 28 января 2020

Мне нравится получать помощь в реализации сокращения данных в GAS, чтобы я мог обрабатывать только данные, которые удовлетворяют определенному условию.

По сути, этот код:

const total = data.reduce((acc, el) => {
  const {hours, approvals: {data}} = el;
  if (data.length && data.filter(e => e.status === 'approved' || 'pending').length >= 5) {
    acc += hours;
  }
  return acc;
}, 0);

console.log(total);

Реализовано в этом:

        var url = 'https://api.10000ft.com/api/v1/users/' + users[i].id + '/time_entries?fields=approvals' + '&from=' + from + '&to=' + to + '&auth=' + TKF_AUTH + '&per_page=' + TKF_PGSZ;
        var response = UrlFetchApp.fetch(url, options);
        var info = JSON.parse(response.getContentText());
        var content = info.data;
        var total_hours = 0;




        for (var j = 0; j < content.length; j++) {
            if (content[j].approvals.data.length > 0 && content[j].approvals.data[0].status != 'ignored') {

                total_hours += content[j].hours;

            }
        }

        Logger.log('User name: ' + users[i].display_name + ' ' + 'User id: ' + users[i].id + '  ' + 'total hours: ' + total_hours)
    }

}

У кого-нибудь есть идеи?

1 Ответ

3 голосов
/ 28 января 2020
  • Вы хотите преобразовать следующий скрипт в скрипт, который можно использовать со скриптом Google Apps.

    const total = data.reduce((acc, el) => {
      const {hours, approvals: {data}} = el;
      if (data.length && data.filter(e => e.status === 'approved' || 'pending').length >= 5) {
        acc += hours;
      }
      return acc;
    }, 0);
    
    console.log(total);
    
  • Вы уже подтвердили, что выше Сценарий работал для вашей ситуации с Javascript.

Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Модифицированный скрипт:

const total = data.reduce(function(acc, el) {
  const {hours: hours, approvals: {data: data}} = el;
  if (data.length && data.filter(function(e) {return e.status === 'approved' || 'pending'}).length >= 5) {
    acc += hours;
  }
  return acc;
}, 0);
Logger.log(total)
  • Невозможно использовать функцию стрелки.
  • Назначение деструктурирования const {hours, approvals: {data}} = el; не может быть использовано. Пожалуйста, измените на const {hours: hours, approvals: {data: data}} = el;.

Ссылки:

Если я неправильно понял ваш вопрос, и это было не то направление, которое вы хотите, я прошу прощения. В то время, можете ли вы предоставить пример ввода и вывода, который вы ожидаете? Этим я хотел бы подтвердить это.

...