将两个数组合并在一起

时间:2018-01-14 00:25:57

标签: javascript arrays google-apps-script google-sheets

好的,我有来自json的2个数组。 getBalances返回

 [{Currency=USD, Balance=3.25},
  {Currency=CNY, Balance=4.56},
  {Currency=CAD, Balance=4.56},
  {etc},
  {etc}]

和getValues返回

 [{Currency=USDJPY, Equivilent=0.12},
  {Currency=USDCNT, Equivilent=0.75},
  {Currency=USDJPN, Equivilent=0.75},
  {etc},
  {etc}]

最多有100多种货币和3对响应,每种货币至少为1。

我正在寻找一个如何获取这些数组的示例,并将它们组合起来。

{Currency=USD, Balance=3, USDCNY=0.12, USDJPN=0.75, USDCAD=0.75},

如果有人可以给我一个起点来查看或者带有解释和参考的示例代码很酷。我对如何做到这一点感到茫然,而我的谷歌也让我失望。

function getValues(){
  //var balancesSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Balances");
  //var exchange = balancesSheet.getRange(1,1,150,1);
  var finals = [];
  var endpoint = "someapiendpoint"
  var results = publicRequest(endpoint); // calls function to create url and returns json
  var dataAll = JSON.parse(results.getContentText());
  var dataSet = dataAll;
   dataSet.forEach(function(result,index) {
    finals.push({'Currency': result.symbol, 'Equivilent': result.price})
  });
  finals.sort(function(a, b){
    if(a.Currency < b.Currency) return -1;
    if(a.Currency > b.Currency) return 1;
    return 0;
  });
 // Logger.log(finals);    
  return json2array_(finals);

};

function loadBalances(){
  var balancesSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Balances");
  balancesSheet.getRange(1,1,150,2).clearContent();
  var balances = getbalances();
  var arr = json2array_(balances);
  var removeZerobalances = arr.filter(function(item){ return item[1] != 0 });  
  var destinationRange = balancesSheet.getRange(1,1,removeZerobalances.length,removeZerobalances[0].length);
  destinationRange.setValues(removeZerobalances);
};

function getbalances() {
  var finals = [];
  var endpoint = "someapiendpoint"
  var results = privateRequest(endpoint,"timestamp="+nonce); // calls function to create url and json
  var dataAll = JSON.parse(results.getContentText());
  var dataSet = dataAll;

  dataSet.balances.forEach(function(result,index) {
    finals.push({'Currency': result.asset, 'Balance': result.free})
  });
  //Logger.log(finals);
  return finals;
};

function json2array_(data){
  var results = [];
  var keys = [];
  var values = [];
  for (var i in data){
    for (var Key in data[i]){
      if (i == 0) keys.push(Key);
      values.push(data[i][Key]);
    }
    if (i == 0){
      results.push(keys);
      keys = [];
    }
    results.push(values);
    values = [];
  }
  return results;
};

1 个答案:

答案 0 :(得分:0)

在Google Apps脚本中,当使用Logger.log()查看对象时,keyvalue被视为key=value。这可以用作对象。那么这个示例脚本怎么样?通过将Currency的{​​{1}}数据与getBalances()的数据的顶部字符进行比较,可以检索getValues()的{​​{1}}和Currency

示例脚本:

Equivilent

样本结果:

输入:
getValues()
输出:
var obj1 = getBalances();
var obj2 = getValues();
var res = [];
obj1.forEach(function(e1){
  var temp = {
    Currency: e1.Currency,
    Balance: e1.Balance
  };  
  obj2.forEach(function(e2){
    if (e2.Currency.slice(0, e1.Currency.length) == e1.Currency) {
      temp[e2.Currency] = e2.Equivilent;
    }
  });
  res.push(temp);
});
Logger.log(res)

如果我误解了你的问题,请告诉我。我想修改。

相关问题