【发布时间】:2015-04-15 21:50:15
【问题描述】:
我正在使用 Google 表格和脚本来编写从表中查找数据并将记录作为哈希返回的函数。可能有更好的方法来做到这一点,但现在,我正在尝试返回一个记录哈希数组,其中的键是字段名称。
我遇到的问题是从数组中的单个记录哈希中调用一个键。它只是返回“未定义”。这是我编写的测试代码的一部分,用于查看我遇到问题的应用程序代码:
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']);
}
}
这是源数据表:
这里是代码输出的日志:
[-] This is the resulting output array of hashes:
[-] -------------0-------------
[-] {'Date Added'='', 'Child Attribute'='Color', 'Parent Attribute'='AESTHETICS', 'Added by'='', 'ID'='21'}
[-] -------------1-------------
[-] {'Date Added'='', 'Child Attribute'='Finish', 'Parent Attribute'='AESTHETICS', 'Added by'='', 'ID'='22'}
[-] -------------2-------------
[-] {'Date Added'='', 'Child Attribute'='Material', 'Parent Attribute'='AESTHETICS', 'Added by'='', 'ID'='23'}
[-] -------------3-------------
[-] {'Date Added'='', 'Child Attribute'='VBL Styling Adherence', 'Parent Attribute'='AESTHETICS', 'Added by'='', 'ID'='24'}
[-] Here are the Parent Attributes from each hash:
[-] -------------0-------------
[-] undefined
[-] -------------1-------------
[-] undefined
[-] -------------2-------------
[-] undefined
[-] -------------3-------------
[-] undefined
在这个输出中,看起来我已经成功创建了一个哈希数组,尽管我无法从每个哈希中调用 ['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
我无法弄清楚为什么我能够在我的简单测试代码中从数组中的一个哈希调用哈希键值,但在我测试我的应用程序代码时却不行。我已经尝试了所有不同的方式,并且检查了前导和尾随空格。我在这里想念什么?
谢谢你, 尼古拉斯·金凯德
【问题讨论】:
-
Logger.log(typeof OutputHashArray[0])记录什么?你也可以通过OutputHashArray[i]for-in吗?
标签: javascript arrays google-apps-script hash