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;
答案 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;}};
}
然后我创建了这个电子表格,用于将值加载到我的对象中:
然后我创建了这个函数,用于将对象加载到任何对象数组中
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
}
运行加载数据后的电子表格
答案 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);
}