0

我正在编写一个程序,它从文件中获取一些数据(在这种情况下,是一个 ID 列表)。然后,该程序获取 ID,与天气服务器连接,获取服务器返回的信息,并对其进行解析。
然后它按城市名称的顺序对数据进行排序,并将其推送到一个数组中。我正在尝试将其打印出来,但是当我打印数组时,我不断得到以下输出:

[ { string: 'Dallas, TX : 91' },
  { string: 'Houston, TX : 86' },
  { string: 'Houston, TX : 86' },
  { string: 'Jacksonville, FL : 83' },
  { string: 'Laguna Hills, CA : 67' },
  { string: 'New York, NY : 91' },
  { string: 'Seattle, WA : 62' } ]

当然,我希望包括方括号和逗号。但是,为什么要打印出“字符串:”和花括号?

这是我的来源:

var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
var lineReader = require('line-reader');
var cityList = [];
var numItems = 0;
var needToPrint = 0;

lineReader.eachLine('IDList.txt', function(line, last) {
  numItems++;
  getResponse(line, textParse);
});


var getResponse = function(id, callback){
    var request = new XMLHttpRequest;                           

    request.open("GET", "http://weather.yahooapis.com/forecastrss?w=" + id +"&u=f");    
    request.onreadystatechange = function(){                        


        if(request.readyState === 4 && request.status === 200){            
            var type = request.getResponseHeader("Content-Type");            
            if(type.indexOf("xml") !== -1 && request.responseXML)           
                callback(request.responseXML);
            else if(type === "application/json")
                callback(JSON.parse(request.responseText));         
            else
                callback(request.responseText);             
        }
    };
    request.send(id);                                   
}

var textParse = function (input)
{
    var index = input.indexOf("city=\"") + "city=\"".length;
    var endIndex = input.indexOf("\" region=\"");
    var city = input.substring(index, endIndex);
    index = input.indexOf("region=\"") + "region=\"".length;
    var state = input.substring(index, index + 2);
    index = input.indexOf("temp=\"") + "temp=\"".length;
    endIndex = input.indexOf("\"", index);
    var temp = input.substring(index, endIndex);
    var obj = new location(city, state, temp);
    cityList.push(obj);
    cityList.sort(sortFunc);
    needToPrint++;

    if(numItems === needToPrint)
        printData(cityList);


}

var location = function (city, state, currentTemp)
{
    this.string = city + ", " + state + " : " + currentTemp;
};

var sortFunc = function(input1, input2)
{
    if (input1.string < input2.string) //sort string ascending
        return -1
    if (input1.string > input2.string)
        return 1
    return 0 //default return value (no sorting)
}

var printData = function(objectList){
    console.log(objectList);
}
4

2 回答 2

1

您正在创建一个位置对象:

var obj = new location(city, state, temp);

在该对象中,您创建一个string属性:

this.string = city + ", " + state + " : " + currentTemp;

如果您想要的是一个简单的字符串数组,请更改textParse为:

cityList.push(city + ", " + state + " : " + currentTemp);

(而不是推送位置对象)

这也需要您重写排序函数。


看起来您没有编写该代码,否则您会理解它。也许您缺少的objectList是一组对象。您可以通过数组索引访问您的数据,然后是对象属性(在本例中为string)。例如,试试这个printData

console.log(objectList[1].string); // 'Houston, TX : 86'

有关如何遍历数据的更多信息,请参阅访问/处理(嵌套)对象、数组或 JSON

于 2013-07-19T17:14:14.700 回答
0

看起来您正在将 Javascript 对象推送到cityList数组中,因此当您调用 时printData(cityList),您正在记录一个数组对象,而不是字符串。因此,控制台会输出 JSON。如果你想要原始文本,你需要构建一个字符串。

于 2013-07-19T17:13:43.923 回答