2011-02-22 72 views
0

这是我的问题。如何将变量与数组中的条目进行比较

我正在做闪存中的一个小天气的web应用程序。 所以我读了一个XML feed,并从中复制了一组数据。

我的XML是这样

<xml> 
<prevision> 
<date>22</date> 
<hour>5</hour> 
<temperature>40</temperature> 
</prevision> 
<prevision> 
<date>22</date> 
<hour>10</hour> 
<temperature>44</temperature> 
</prevision> 
<prevision> 
<date>22</date> 
<hour>14</hour> 
<temperature>45</temperature> 
</prevision> 
<prevision> 
<date>22</date> 
<hour>20</hour> 
<temperature>37</temperature> 
</prevision> 
</xml> 

所以这里就是我和我的Actionscript做现在2

//************************************** 
// Here i'm getting the current hour 

var mytime = new Date(); 
var currenthour = mytime.getHours(); 

//************************************* 
// Here i'm getting my XML 

var myhour:Array = new Array(); 
var myxml:XML = new XML(); 
myxml.ignoreWhite = true; 
myxml.onLoad = function(success) 
{ 
dataextractor = myxml.firstChild.childNodes; 
for (var j = 0; j < dataextractor.length; j++) 
{ 
myhour.push(dataextractor[j].childNodes[1].firstChild.nodeValue); 
} 
// Doing this 
trace(mydate); 
} 
// Will return this 
// 5 , 10, 14 , 20 

我想要做什么是寻找和追踪在入境mydate数组,它的值最接近“currenthour”变量(这是我当前上升的时间)。

对于为例如果currentHour的= 11 当i具有myhour阵列等于5,10,14,20 最佳匹配将是如此myhour [1]

有人帮助可以这样做呢? myhour数组没有固定数量的条目。 有时也可以是5,10,14和其他时间只是14,20等

非常感谢,

回答

0

我不知道,如果我得到你的想法。你是否需要从我的小时阵列中找到最近的当前小时数?

就是这样:

var minDiff : int = 12; 
var diff : int; 
var index : int = 0; 

for (var i : int = 0; i < myhour.length; i++) 
{ 
    diff = Math.abs(myhour[i] - currenthour); 
    if (diff > 12) 
     diff = 24 - diff; 
    if (diff < minDiff) 
    { 
     minDiff = diff; 
     index = i; 
    } 
} 

myhour[index]是结果。希望,我有一个想法。

0

想象一下你的数字在一行上,从0到24. 使用一个变量来跟踪XML中当前小时和每个小时之间的最小距离,你可以找到你正在寻找的节点的索引为:

import mx.xpath.XPathAPI; 

var myxml:XML = new XML(); 
myxml.ignoreWhite = true; 
myxml.onLoad = function(loaded:Boolean) { 
    if (loaded) { 
     var hoursMin:Number = 24; 
     var hoursNow:Number = new Date().getUTCHours(); 
     var hourID:Number; 
     var hours:Array = XPathAPI.selectNodeList(this.firstChild, "xml/prevision/hour"); 
     var hoursNum:Number = hours.length; 
     for(var i:Number = 0 ; i < hoursNum; i++){ 
      var hoursDiff:Number = Math.abs(hoursNow - parseInt(hours[i].firstChild));//look for the 'shortest distance' within 24 numbers 
      if(hoursDiff < hoursMin){//found the smallest current value 
       hoursMin = hoursDiff;//update the minimum 
       hourID = i;//store the node ID 
      } 
     } 
     trace(this.firstChild.childNodes[hourID]);//access the closest node in time 
    } else { 
     trace("XML Load Error!!"); 
    } 
} 
myxml.load("feed.xml"); 

这里是没有的XPath同样的事情,但我发现访问节点有点这样困难:

var myxml:XML = new XML(); 
myxml.ignoreWhite = true; 
myxml.onLoad = function(loaded:Boolean) { 
    if (loaded) { 
     var hoursMin:Number = 24; 
     var hoursNow:Number = new Date().getUTCHours(); 
     var hourID:Number; 
     var hoursNum:Number = this.firstChild.childNodes.length; 
     for(var i:Number = 0 ; i < hoursNum; i++){ 
      var hoursDiff:Number = Math.abs(hoursNow - parseInt(this.firstChild.childNodes[i].childNodes[1].firstChild));//look for the 'shortest distance' within 24 numbers 
      if(hoursDiff < hoursMin){//found the smallest current value 
       hoursMin = hoursDiff;//update the minimum 
       hourID = i;//store the node ID 
      } 
     } 
     trace(this.firstChild.childNodes[hourID]);//access the closest node in time 
    } else { 
     trace("XML Load Error!!"); 
    } 
} 
myxml.load("feed.xml"); 

HTH

相关问题