让数组中的对象调用不带if语句的变量

时间:2018-04-12 01:56:02

标签: javascript google-apps-script

rawData是一个数组,对于数组中的每个实例,都有两个对象:row [0](coincell)和row1。 coincell有六个不同的值,对于coincell的每个值,我想总结该特定值的所有实例。我知道我可以做6种不同的if if else if等。有更清洁的方法吗?像下面粘贴的代码,我可以让数组实例中的coincell对象引用该特定变量? BTW更喜欢可以在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;

3 个答案:

答案 0 :(得分:0)

实际上我会采用最动态的方式来处理这个问题,例如,这会创建一个包含所有货币及其总和的对象,如果你添加越来越多的硬币,它将会起作用。

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);

答案 1 :(得分:0)

使用值和求和方法

创建对象

首先,我创建了一个用于创建我的对象的函数,该函数不是您要求的,但它已接近并且它包含求和方法。

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;}};
}

然后我创建了这个电子表格,用于将值加载到我的对象中:

enter image description here

然后我创建了这个函数,用于将对象加载到任何对象数组中

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
}

运行加载数据后的电子表格

enter image description here

答案 2 :(得分:0)

我会使用一个简单的关联对象,即键值配对:

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

如果行中的单元格标识出您正在使用的硬币,则返回当前总和非常容易。您可以将其扩展为设计以跟踪其他信息(例如存储值以及平均值等)

一个例子,其中硬币类型在A列中,硬币计数在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);
}