如何声明一个JavaScript列表变量以便以后填充?

时间:2013-12-11 18:41:31

标签: javascript jquery

这是我尝试创建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&parameterCd=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&parameterCd=00060,00065

提前感谢您的时间和指导!

1 个答案:

答案 0 :(得分:2)

你的主要问题是AJAX回调中的this不是你的对象,它可能是由jQuery创建的jqXHR对象或你用{{1}迭代的当前元素。 }}

最简单的解决方案是在可以从内部函数内部访问的更高级词法范围中创建对.each的另一个引用:

this