这是我尝试创建JavaScript对象的第一步。我试图从USGS REST服务的非常复杂的JSON响应中提取属性,并将它们保存为对象供以后使用。
我尝试做的是创建一个空数组作为对象的第一个属性,以便稍后用自定义对象的实例填充,即实际代码的最后一行。在深入研究W3C,MDN和这个网站之后,我还没有真正想出一个解决方案。
请随意提供阵列问题的解决方案,同时也对其余代码提出建设性的批评。毕竟,我正在尝试学习这个项目。
// create site object
function Site(siteCode) {
this.timeSeriesList = [];
this.siteCode = siteCode
this.downloadData = downloadData;
// create timeSeries object
function TimeSeries(siteCode, variableCode) {
this.siteCode = siteCode;
this.variableCode = variableCode;
this.observations = [];
}
// create observation object
function TimeSeriesObservation(stage, timeDate) {
this.stage = stage;
this.timeDate = timeDate;
}
// include the capability to download data automatically
function downloadData() {
// construct the url to get data
// TODO: include the capability to change the date range, currently one week (P1W)
var url = "http://waterservices.usgs.gov/nwis/iv/?format=json&sites=" + this.siteCode + "&period=P1W¶meterCd=00060,00065"
// use jquery getJSON to download the data
$.getJSON(url, function (data) {
// timeSeries is a two item list, one for cfs and the other for feet
// iterate these and create an object for each
$(data.value.timeSeries).each(function () {
// create a timeSeries object
var thisTimeSeries = new TimeSeries(
this.siteCode,
// get the variable code, 65 for ft and 60 for cfs
this.variable.variableCode[0].value
);
// for every observation of the type at this site
$(this.values[0].value).each(function () {
// add the observation to the list
thisTimeSeries.observations.push(new TimeSeriesObservation(
// observation stage or level
this.value,
// observation time
this.dateTime
));
});
// add the timeSeries instance to the object list
this.timeSeriesList.push(thisTimeSeries);
});
});
}
}
如果您想查看我用于测试的JSON,可以在此处找到它:http://waterservices.usgs.gov/nwis/iv/?format=json&sites=03479000&period=P1W¶meterCd=00060,00065
提前感谢您的时间和指导!
答案 0 :(得分:2)
你的主要问题是AJAX回调中的this
不是你的对象,它可能是由jQuery创建的jqXHR
对象或你用{{1}迭代的当前元素。 }}
最简单的解决方案是在可以从内部函数内部访问的更高级词法范围中创建对.each
的另一个引用:
this