如何在 Google App Script (Javascript ES5) 中实现数据减少

How do I implement data reduce in Google App Script (Javascript ES5)

我喜欢在 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)
    }

}

有人有想法吗?

  • 您想将以下脚本转换为可与 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;.

参考文献:

如果我误解了您的问题并且这不是您想要的方向,我深表歉意。届时,您能否提供您期望的样本输入和输出?借此,我想确认一下。