如何减少数组的数值,跳过字符串

时间:2017-01-27 03:52:46

标签: arrays filter google-sheets reduce

使用Google表格的脚本编辑器,我需要计算表格的平均值,例如:

+---------+---------+---------+---------+
|         |  User 1 |  User 2 |  User 3 |
+---------+---------+---------+---------+
|         | 20/1/17 | 21/1/17 | 22/1/17 |
+---------+---------+---------+---------+
| Movie 1 |    6    |    2    |    0    |
+---------+---------+---------+---------+  
| Movie 2 |    2    |    1    |    5    | 
+---------+---------+---------+---------+
| Movie 3 |    3    |    1    |    2    | 
+---------+---------+---------+---------+

我希望结果是:

+---------+---------+---------+
|  User 1 |  User 2 |  User 3 |
+---------+---------+---------+   
|   3.6   |   1.3   |   2.3   |
+---------+---------+---------+ 

我有这个代码,如果我在仅由数字组成的表上使用它。问题是我的表中有字符串,所以.reduce返回一个#NUM!错误(结果不是数字)。

var sum = array.reduce(function(r, e, i) {
  e.forEach(function(a, j) {
    r[j] = (r[j] || 0) + a
  })
  if (i == array.length - 1) r = r.map(function(el) {
    return el / array.length
  });
  return r;
}, []);

return sum;

如何仅使用数值执行平均值?我尝试使用.filter,但它似乎无法在Google Apps脚本编辑器上运行,或者我只是使用它错了(非常可能)。

这是我用来过滤的条件:

(typeof el !== 'number')

1 个答案:

答案 0 :(得分:2)

以下样本怎么样?您可以在Google Apps脚本上使用此功能。

Spec:
'spec' '(' (attrs+=AttrAsgn (',' attrs+=AttrAsgn)*)? ')';