Apps脚本根据输入源

时间:2016-03-22 23:19:45

标签: javascript arrays google-apps-script google-sheets

我有以下代码,它充当Google电子表格的自定义函数:

// counts the instances of elem in an array called list
function countInstances(elem, list) {
  var p = 0;

  for (var i = 0; i < list.length; i++) {
    if (list[i] == elem) p++;
  }
  return p
}

function J(E) {
  //var E =   ["a","a","a","a","b","b","b","b","c","c","c","c"];
  var elems = E.getUnique();
  var b;

 return countInstances(elems[0], E);
}

这似乎是直截了当的,但发生了一些奇怪的事情:

  • 当我在代码中取消注释“var E”时,b返回我希望它返回的内容:4表示a,4表示b,4表示c,即数组中每个字符的实例数
  • 当我没有将E硬编码到代码中,而是使用对我的电子表格的引用时,b给我1表示a,1表示b,1表示c。显然,它只识别第一个实例。
  • 当我在countInstances中记录if条件时,我可以学到两件事:1)只有第一个实例被认为是TRUE,2)elem在前四次仍然是“a”而list也是我看到的数组它,意味着比较的评价似乎没有,但我不知道为什么。
  • 当我回到代码并在注释中将“elems [i]”更改为“here”时,例如,再次返回正确的a数。这是我得出的结论,当值被移交给子函数时会发生一些奇怪的绑定。

修改

getUnique函数

Array.prototype.getUnique = function(){
  var u = {}, a = [];
  for(var i = 0, l = this.length; i < l; ++i){
    if(u.hasOwnProperty(this[i])) {
       continue;
    }
    a.push(this[i]);
    u[this[i]] = 1;
 }
 return a;
}

编辑2:

您可以找到示例电子表格here

1 个答案:

答案 0 :(得分:1)

编辑:如果您想直接在电子表格(example spreadsheet)中将其用作自定义公式,则此功能有效:

dateDisabledArray = [];