2011-06-16 74 views
2

当执行下面的代码时,萤火虫告诉我:values [this.geo.value]是undefined 这是什么问题?为什么数组未定义?

$.get('./RDFexamples/tin00089_test2.rdf', null, function (rdfXml) { 
var rdf, json = {}; 
var values = new Array(); 

rdf = $.rdf() 
    .load(rdfXml) 
    .prefix('', 'http://ontologycentral.com/2009/01/eurostat/ns#') 
    .prefix('qb', 'http://purl.org/linked-data/cube#') 
    .prefix('rdf', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#') 
    .prefix('dcterms', 'http://purl.org/dc/terms/') 
    .prefix('sdmx-measure', 'http://purl.org/linked-data/sdmx/2009/measure#') 
    .where('?observation a qb:Observation') 
    .where('?observation dcterms:date ?date') 
    .where('?observation sdmx-measure:obsValue ?measure') 
    .where('?observation :geo ?geo') 
    .each(function() { 
     values[this.geo.value].push(this.measure.value); 
     //alert(this.date.value) 
     //alert(this.measure.value) 
     //alert(this.geo.value) 
    } 
    ); 
    alert(values); 
}); 

回答

3

值[this.geo.value]从来都不是初始化,所以你不能做.push,因为values [this.geo.value]是未定义的,你首先需要在values [this.geo.value]中创建一个数组,然后才能将它推入。

的伪代码示例

if values[this.geo.value] == undefined { 
    values[this.geo.value] = [] 
} 
values[this.geo.value].push(...) 
2

push是Array对象本身的方法 - 要调用它在阵列内的值(这可能尚未设定,因此“未定义”)。目前还不清楚是什么this.geo.value是的,但假设你正试图设置数组项目的索引,你的选择是:

values.push(this.measure.value); 

values[this.geo.value] = this.measure.value;