RawData est un tableau et pour chaque instance du tableau, il y a deux objets: row [0] (coincell) et row1. Il y a six valeurs différentes que coincell pourrait être et pour chaque valeur de coincell, je veux additionner toutes les instances de cette valeur spécifique. Je sais que je peux faire 6 différents si, sinon si, etc. Existe-t-il une façon plus propre de procéder? Quelque chose comme le code collé ci-dessous où je pouvais laisser l'objet coincell dans l'instance de tableau référencer cette variable particulière? BTW préfère quelque chose qui peut fonctionner dans GAS

  var BTC = 0;
  var BCH = 0;
  var LTC = 0;
  var ZEC = 0;
  var DASH = 0;
  var BTCP = 0;
  var XVG = 0;
  for(i in rawData){
    var row = rawData[i];
    var coincell = row[0];
    var amtcell = row[1];
    Logger.log(coin)
    coincell += amtcell;
0
Jo Gilpo 12 avril 2018 à 04:56

3 réponses

Meilleure réponse

En fait, je ferais de la manière la plus dynamique pour gérer cela, par exemple cela créerait un objet avec toutes les devises et leurs sommes et cela fonctionnera si vous ajoutez de plus en plus de pièces.

const coinsArray = [
['BTC', 100],
['BCH', 150],
['BTC', 100],
['ZEC', 100],
['BCH', 520],
['DASH', 100],
['DASH', 250],
['BTC', 200],
]

const coinsCount = {};

coinsArray.forEach(coin=>{
    if(!coinsCount[coin[0]]){
        coinsCount[coin[0]] = 0;
    }
    coinsCount[coin[0]] += coin[1];
})


console.log(coinsCount);
0
Prince Hernandez 12 avril 2018 à 12:22

J'utiliserais un simple objet associatif, c'est-à-dire un appariement clé-valeur:

var sums = {
  BTC: 0,
  ...
};

Si une cellule de la ligne identifie la pièce avec laquelle vous travaillez, il est extrêmement facile de retourner la somme actuelle. Vous pouvez l'étendre à la conception pour suivre des informations supplémentaires (par exemple, stocker les valeurs et également la moyenne, etc.)

Un exemple, où le type de pièce se trouve dans la colonne A et le nombre de pièces dans la colonne B:

function tallySheet() {
  var sheet = SpreadsheetApp.getActive().getSheetByName("name");
  var values = sheet.getDataRange().getValues();
  var sums = {};
  for(var r = 0; r < values.length; ++r) {
    var coinType = values[r][0];
    if(!sums[coinType]) {
      sums[coinType] = 0;
    }
    sums[coinType] += values[r][1];
  }
  console.log(sums);
}
0
tehhowch 12 avril 2018 à 03:55

Création d'un objet avec des valeurs et une méthode de somme

J'ai d'abord créé une fonction pour créer mon objet qui n'est pas exactement ce que vous avez demandé mais elle est proche et contient une méthode de somme.

function makeMyObject(v1,v2,v3,v4,v5) {
  return {value1:v1,value2:v2,value3:v3,value4:v4,value5:v5,sum:function(){return this.value1+this.value2+this.value3+this.value4+this.value5;}};
}

J'ai ensuite créé cette feuille de calcul pour charger des valeurs dans mes objets:

enter image description here

J'ai ensuite créé cette fonction pour charger les objets dans n'importe quel tableau d'objets

function loadData(){
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('ObjectData');
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  var myObjA=[];
  for(var i=1;i<vA.length;i++){
    myObjA=makeMyObject(vA[i][0],vA[i][1],vA[i][2],vA[i][3],vA[i][4]);
    vA[i][5]=myObjA.sum();//object is created above and I call the sum method to put the value into vA[i][5] which is the sum column.  vA[i][5] was  created because there is a header element in that column and getDataRange always return a rectangular range so the last column elements are empty but they are there ready to accept data.
  }
  rg.setValues(vA);//write the data into the range to show the sums
}

La feuille de calcul après l'exécution des données de chargement

enter image description here

0
Cooper 12 avril 2018 à 03:57