Javascript中的哈希数组

Javascript中的哈希数组,javascript,arrays,google-apps-script,hash,Javascript,Arrays,Google Apps Script,Hash,我正在使用GoogleSheets和脚本编写函数,从表中查找数据并将记录作为散列返回。也许有更好的方法可以做到这一点,但现在,我尝试返回一个记录哈希数组,其中键是字段名 我遇到的问题是从数组中的单个记录哈希调用一个键。它只是返回“未定义”。以下是我编写的测试代码的一部分,以查看我遇到问题的应用程序代码: function hashArrayTest() { var workbookKey = "I blanked this out" var tableName = "AttributeC

我正在使用GoogleSheets和脚本编写函数,从表中查找数据并将记录作为散列返回。也许有更好的方法可以做到这一点,但现在,我尝试返回一个记录哈希数组,其中键是字段名

我遇到的问题是从数组中的单个记录哈希调用一个键。它只是返回“未定义”。以下是我编写的测试代码的一部分,以查看我遇到问题的应用程序代码:

function hashArrayTest() {
  var workbookKey = "I blanked this out"
  var tableName = "AttributeChildParentJoin";
  var headerRow = 1;
  var i;
  var attrsJoinObj = new dbEntitySource(workbookKey, tableName, headerRow);
  var OutputHashArray = attrsJoinObj.returnHashItems("Parent Attribute", "Child Attribute", "AESTHETICS");

  Logger.log("This is the resulting output array of hashes: ");

  for(i=0; i<OutputHashArray.length; i++){
    Logger.log("-------------" + i + "-------------");
    Logger.log(OutputHashArray[i]);
  }

  Logger.log("Here are the Parent Attributes from each hash: ");

  for(i=0; i<OutputHashArray.length; i++){
    Logger.log("-------------" + i + "-------------");
    Logger.log(OutputHashArray[i]['Parent Attribute']);
    }
  }
在这个输出中,看起来我已经成功地创建了一个哈希数组,尽管我无法从每个哈希调用['Parent Attribute']键

我编写了一个非常简单的函数,用哈希数组来测试我的问题,但这次我成功了。=>
代码如下:

function rawHashTest(){
 var recordHash1 = {};
 recordHash1['car'] = 45;
 recordHash1['chicken'] = "ten";

 var recordHash2 = {};
 recordHash2['red'] = 30;
 recordHash2['sticks'] = "blue";

 Logger.log(recordHash1);  
 Logger.log(recordHash1['car']);

 var hashArray = new Array();
 hashArray = [recordHash1, recordHash2];

 Logger.log(hashArray);
 Logger.log(hashArray[0]);
 Logger.log(hashArray[0]["car"]); 
}
下面是日志:

[-] {chicken=ten, car=45.0}
[-] 45.0
[-] [{chicken=ten, car=45.0}, {red=30.0, sticks=blue}]
[-] {chicken=ten, car=45.0}
[-] 45.0
我不明白为什么在我的简单测试代码中可以从数组中的一个散列调用散列键值,但在测试应用程序代码时却不能。我尝试了所有不同的方法,并检查了前导空格和尾随空格。我错过了什么

谢谢,,
尼古拉斯·金凯

谢谢大家的提问。我检查了returnHashItems方法,发现了问题

My dbEntitySource.returnHashItems方法使用另一种方法来构建每个散列。以下是包含原始行和更新行的代码:

 this.returnHash = function returnHash(recordIndex){
    var recordHash = {};

    if (recordIndex !== -1){
      for (i=0; i<this.headerArray.length;i++){

        // This is the line that was giving me the issue:
        //recordHash["'"+ this.headerArray[i] +"'"] = "'" + this.dataArray[recordIndex][i] + "'";          

        // This is the line that fixed the problem:
        recordHash[this.headerArray[i]] = this.dataArray[recordIndex][i];
     }
    }
    return recordHash;
 }
但是,由于headerArray和dataArray中的值已经是字符串,因此这是多余的,也会导致问题。什么类型的问题,我还不确定

谢谢你,cssimsek,提供了调试技巧。我在修复前后检查了OutputAshArray[0]的类型:

 function hashArrayTest() {

  var workbookKey = "1uOHlrW8pSACDg9dNUzMFKgLi8fDBT4Wsqc5KadkoCXk";
  var tableName = "AttributeChildParentJoin";
  var headerRow = 1;
  var i;
  var attrsJoinObj = new dbEntitySource(workbookKey, tableName, headerRow);
  var OutputHashArray = attrsJoinObj.returnHashItems("Parent Attribute", "Child Attribute", "AESTHETICS");

  Logger.log("Here is the data type for the OutputHashArray:");
  Logger.log(typeof OutputHashArray);

  Logger.log("Here is the data type for the OutputHashArray[0]:");
  Logger.log(typeof OutputHashArray[0]);

  Logger.log("This is the resulting output array of hashes: ");

  for(i=0; i<OutputHashArray.length; i++){
   Logger.log("-------------" + i + "-------------");
   Logger.log(OutputHashArray[i]);
  }

  Logger.log("Here are the Parent Attributes from each hash: ");

  for(i=0; i<OutputHashArray.length; i++){
   Logger.log("-------------" + i + "-------------");
   Logger.log(OutputHashArray[i]['Parent Attribute']);
  }
 }
函数hashArrayTest(){ var workbookKey=“1oohlrw8psacdg9dnuzmfkgli8fdbt4wsqc5kadkocxk”; var tableName=“AttributeChildParentJoin”; var headerRow=1; var i; var attrsJoinObj=新的dbEntitySource(workbookKey、tableName、headerRow); var OutputHashArray=attrsJoinObj.returnHashItems(“父属性”、“子属性”、“美学”); log(“这是OutputAshArray的数据类型:”); Logger.log(OutputHashArray的类型); log(“这是OutputAshArray[0]:”的数据类型); Logger.log(OutputHashArray的类型[0]); log(“这是散列的结果输出数组:”); 对于(i=0;i什么做
Logger.log(OutputHashArray[0])
log?您也可以通过OutputHashArray[i]在
for中进行
 var recordHash1 = {};
 recordHash1['car'] = 45;
 recordHash1['chicken'] = "ten";
 function hashArrayTest() {

  var workbookKey = "1uOHlrW8pSACDg9dNUzMFKgLi8fDBT4Wsqc5KadkoCXk";
  var tableName = "AttributeChildParentJoin";
  var headerRow = 1;
  var i;
  var attrsJoinObj = new dbEntitySource(workbookKey, tableName, headerRow);
  var OutputHashArray = attrsJoinObj.returnHashItems("Parent Attribute", "Child Attribute", "AESTHETICS");

  Logger.log("Here is the data type for the OutputHashArray:");
  Logger.log(typeof OutputHashArray);

  Logger.log("Here is the data type for the OutputHashArray[0]:");
  Logger.log(typeof OutputHashArray[0]);

  Logger.log("This is the resulting output array of hashes: ");

  for(i=0; i<OutputHashArray.length; i++){
   Logger.log("-------------" + i + "-------------");
   Logger.log(OutputHashArray[i]);
  }

  Logger.log("Here are the Parent Attributes from each hash: ");

  for(i=0; i<OutputHashArray.length; i++){
   Logger.log("-------------" + i + "-------------");
   Logger.log(OutputHashArray[i]['Parent Attribute']);
  }
 }