1
我有下面的代碼,這是作爲一個谷歌電子表格的自定義函數:的Apps腳本綁定不同,這取決於輸入源
// 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硬編碼到代碼中,而是使用refe依靠我的電子表格,b給我1爲a,1爲b,1爲c。顯然,它只承認第一例。
- 當我在countInstances中記錄if條件時,我可以學到兩件事:1)只有第一個實例被認爲是TRUE,2)elem在前四次仍然是「a」,列表也是我看到的數組這意味着評估的比較似乎沒有了,但我不知道爲什麼。
- 當我回到代碼並在評論中的「這裏」中將「elems [i]」更改爲「a」時,例如,再次返回正確數目的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。
我得到的錯誤:*找不到功能getUnique的對象,一, a,a,b,b,b,b,c,c,c,c。* getUnique()函數在哪裏? –
在編輯中添加了它。它工作的很好,我不想添加太多不必要的代碼 - 關於這個問題 – oliver13
當E從電子表格自定義函數傳遞時,它是否以數組的形式到達函數'J'?你可以用'Logger.log('typeof J:'+ typeof J)檢查數據類型;'這是我能想到的唯一可能會改變的區別? –