1
Bir Google E-tablosu için özel bir işlevi olarak davranmaktadır Aşağıdaki kod var:Apps Komut farklı giriş kaynağına göre bağlayan
// 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);
}
Bu düz ileri görünüyor, ama garip bir şey oluyor:
- ben kodunda "var E" yorumsuz b ben dönmek beklenir verir: 4 bir için, 4 b, 4 c, her karakterin örneklerini sayısına yani dizideki
- Kodu E'ye kodlamadığımda, bunun yerine bir referans etiketi kullanın. bültenime göre, b a için 1, b için 1, c için 1 verir. Anlaşılan, sadece ilk örneği tanır.
- Sayım durumundaki if koşulunu günlüğe kaydederken iki şey öğrenebilirim: 1) yalnızca ilk örnek TRUE olarak kabul edilir, 2) elem hala ilk dört kez "a" ve liste de gördüğüm dizidir Yani, karşılaştırmanın değerlendirilmesi kapalı gibi görünüyor, ama nedenini bilmiyorum.
- Koduna geri döndüğümde ve yorumda "burada" yazdığı satırdaki "elems [i]" i değiştirdiğimde, ör. A'nın doğru sayısı tekrar döndürülür. Değer alt fonksiyona teslim edildiğinde bazı garip bağlanmaların gerçekleştiği sonucuna varıyorum.
DÜZENLEME
getUnique fonksiyonu
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;
}
DÜZENLEME 2:
Bir örnek-tabloyu here bulabilirsiniz.
Şu hatayı alıyorum: * nesne a işlevi getUnique bulamıyor, bir, a, a, b, b, b, b, c, c, c, c. * getUnique() işlevi nerede? –
Düzenlemede eklendi. Çok iyi çalışıyor ve çok fazla gereksiz kod eklemek istemedim - bu – oliver13
hakkında ağlayın E e, elektronik tablo özel işlevinden geçtiğinde, bir dizi olarak J işlevi işlevine ulaşır mı? Veri tipini Logger.log ('typeof J:' + typeof J ile) ile kontrol edebilirsiniz, 'Bu fark yaratabileceğimiz tek şey bu mu? –