Hi,
> for (var i:int = 0; i < length; i++) { /*
> Loop Through Each of the
> Records*/
> if (tempArray[i].status == "Act") { /*
> Test to see if current record
> status is ACTIVE */
String comparisons are slow, try to make this numeric if you can.
> for (var j:int = 0; j < length;
> j++){ /* Compare to Each of the
> other Records*/
Should be able to go from i+1 to j in this loop so you don’t do the same
calculations twice. (That will make it run twice as fast.)
> if (i != j) { /*
> Make sure you are not comparing a record to itself
If you change the loop above no need for this.
> */
> if
> (tempArray[i].propOne == tempArray[j].propOne) {
Creating var itemA:Object = tempArray[i] and var itemB:Object = tempArray[j]
rather than looking them up every time may be faster. Use itemA and itemB where
you have tempArray below. Also makes code a little more readable.
> if
> (tempArray[i].propTwo == tempArray[j].propTwo) {
>
> if (tempArray[i].propThree == tempArray[j].propThree) {
>
> if (Math.abs(tempArray[i].propFour - tempArray[j].propFour) <=
> 10) {
>
> if (tempArray[i].propFive == tempArray[j].propFive) {
>
> if (Math.abs(tempArray[i].propSix -
> tempArray[j].propSix) <= 1)
> {
>
> if (Math.abs(tempArray[i].propSeven -
> tempArray[j].propSeven)
> <= 1) {
>
> if (Math.abs(((tempArray[i].propEight
> -
> tempArray[j].propEight)/tempArray[i].propEight))<0.10) {
>
> lon1 =
> tempArray[i].longitude*Math.PI/180;
>
> lon2 =
> tempArray[j].longitude*Math.PI/180;
>
> lat1 =
> tempArray[i].latitude*Math.PI/180;
>
> lat2 =
> tempArray[j].latitude*Math.PI/180;
>
> dlon = lon2 - lon1;
>
> dlat = lat2 - lat1;
>
> a =
> Math.pow(Math.sin(dlat/2), 2) +
> (Math.cos(lat1)*Math.cos(lat2)*Math.pow(Math.sin(dlon/2), 2));
>
> c =
> 2*Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
>
> d = 3961 * c;
>
>
>
> if (d <= tempDistance ) {
>
> count = count + 1;
>
> someProp = someProp +
> Number(tempArray[j].propEleven);
>
> tempCompArray.push({"
> push about 26 properties from one
> array to a comparison array, plus some new values});
>
>
> tempArray[i].propTwelve = is true;
istrue? Is that a string or a number or boolean?
>
> }
>
> }
>
> }
>
> }
>
> }
>
> }
>
> }
> }
> }
> }
>
> }
>
> if (count != 0) {
> /*
> Populate data if there is actually
> data to be updated */
> average =
> someProp/Number(count);
Note sure you need a cast to Number here?
>
> tempArray[i].propThirteen = count;
> tempArray[i].Prop14 =
> average;
>
> if (average == 0.0) {
May be a issue with numbers close to 0, rounding issues etc etc here, typically
something like if (average <= 0.00001) is used.
>
> tempArray[i].propFourteen = 0.0;
> } else {
>
> tempArray[i].propFourteen = (Number(tempArray[i].propTen) -
> average)/average *100.0;
> }
>
>
> tempArray[i].propFifteen = tempArray[i].propFourteen -
> tempArray[i].propFifteen;
> }
>
> count = 0;
> average = 0.0;
> someNumber = 0.0;
> }
> }
>
> PopUpManager.removePopUp(processingPU);
> compArrayCollection.source = tempCompArray;
> mainArrayCollection.source = tempArray;
>
> }
Hope that helps,
Justin
