I am trying to retrieve multiple values from a for loop to be pass into the esri.Geocoding function, but the problem is it only returned the first value and repeat it according to the number of records instead of returning the next value and so on. Any help is appreciated, thank you.
for (var i = 0; i < planes.length; i++) {
var lat2 = planes[i][1];
var lon2 = planes[i][2];
var time2 = planes[i][0];
L.esri.Geocoding.reverseGeocode()
.latlng([lat2, lon2])
.run(function(error, result) {
if (error) {
return console.log("empty");
} else {
//markers.bindPopup("Time: " + time2 + "<br/>Location: " + result.address.Match_addr);
//markers.addTo(mymap);
alert(lat2 + ", " + lon);
}
});
}
Used 'let' instead of 'var' seems fix the problem.
I am trying to animate a line based on the given coordinates array comprising of latitude and longitude and I want to call my function just once and my coordinates name is: replayData.
map.on('postcompose', function (event) {
var vectorContext = event.vectorContext;
var frameState = event.frameState;
vectorContext.setFillStrokeStyle(null, animatedLineStroke);
var features = lineVectorSource.getFeatures();
for (var k = 0; k < features.length; k++) {
var feature = features[k];
if (!feature.get('finished')) {
var coords = feature.getGeometry().getCoordinates();
var elapsedTime = frameState.time - feature.get('start');
var elapsedPoints = elapsedTime * pointsPerMs;
if (elapsedPoints >= coords.length) {
feature.set('finished', true);
}
var maxIndex = Math.min(elapsedPoints, coords.length);
var currentLine = new ol.geom.LineString(coords.slice(0, maxIndex));
if (feature.get('iValue') == undefined || feature.get('iValue') < k) {
// drawMovingCarMarker(coords, k);
feature.set('iValue', k)
}
vectorContext.drawLineStringGeometry(currentLine, feature);
}
}
frameState.animate = true;
});
What this function is doing is first collecting all the values from for loop and then starting the animation. And because of this if I've 5 points the line between first two points will be drawn 5 times then 4,3, and so on.
Any help would be entertained. Thanks in advance.
So i am trying to make a word jumlbe sort of program but i am running into some difficulties with the function for shuffelling the words
So i tried:
function klikk(evt){
var i:int = 0;
var ordet:String = inntastetOrd;
var lengde:int = ordet.length;
var tall:int = 0;
var karakter:String;
for(i=0;i<ordet.length; i++)
{
tall = Math.random() *ordet.length;
karakter = ordet[tall];
ordet[i] = ordet[tall];
ordet[tall] = karakter;
}
But i am getting: "Error #1069: Property "some value" not found on String and there is no default value."
Thanks for help!
If you want to chose a letter in a String, you need to transform this String into Array with the split method.
For example:
var letters:String = "word";
trace(letters[2]); // Error #1069
var a:Array = letters.split(""); // w,o,r,d
trace(a[2]); // r
I need to format numbers with commas as thousand seperators, for example:
1234 = 1,234
1234.50 = 1,234.50
12345.60 = 12,345.60
123456.70 = 123,456.70
1234567.80 = 1,234,567.80
etc etc
This needs to work for numbers with decimal values or without
i.e. both 1234567.80 and 1234567
This is for Actionscript 2 in a Coldfusion / Flash application, so normal actionscript is being used. I have seen a couple of solutions on the net but none quite do the trick.
So far I have the function below, but it is not formatting correctly when decimals are provided.For example: 21898.5 becomes 2,188,8.5.
Please could you help me find the bug or offer an alternative solution that fulfils the requriements.
Thanks
_global.NumberFormat = function(theNumber)
{
var myArray:Array;
var numberPart:String;
var decPart:String;
var result:String = '';
var numString:String = theNumber.toString();
if(theNumber.indexOf('.') > 0)
{
myArray = theNumber.split('.');
numberPart = myArray[0];
decPart = myArray[1];
}
else
{
numberPart = numString;
}
while (numString.length > 3)
{
var chunk:String = numString.substr(-3);
numString = numString.substr(0, numString.length - 3);
result = ',' + chunk + result;
}
if (numString.length > 0)
{
result = numString + result;
}
if(theNumber.indexOf('.') > 0)
{
result = result + '.' + decPart;
}
//alert('Result: ' + result);
return result;
}
You could try this:
_global.NumberFormat = function(numString)
{
numString = String(numString);
var index:Number = numString.indexOf('.');
var decimal:String;
if(index > 0) {
var splitByDecimal:Array = numString.split(".");
//return NumberFormat(splitByDecimal[0])+"."+splitByDecimal[1];
numString = splitByDecimal[0];
decimal = splitByDecimal[1];
} else if(index === 0) {
return "0"+numString;
}
var result:String = '';
while (numString.length > 3 ) {
var chunk:String = numString.substr(-3);
numString = numString.substr(0, numString.length - 3);
result = ',' + chunk + result;
}
result = numString + result;
if(decimal) result = result + "." + decimal;
return result;
}
It splits the number by the decimal if present(compensating for an illegal '.01234' if required), and uses recursion so call itself on the split element.
For your example numbers this traces:
1,234
1,234.50
12,345.60
123,456.70
1,234,567.80
Just for fun
This is why your original code didn't work:
After creating a string representation of the number (var numString:String = theNumber.toString();) you then carried on using the actual number rather than the string version.
After assigning a value to number part you then continued to perform operations on numString rather than numberPart.
A corrected version looks like this:
_global.NumberFormat = function(theNumber)
{
var myArray:Array;
var numberPart:String;
var decPart:String;
var result:String = '';
var numString:String = theNumber.toString();
if(numString.indexOf('.') > 0)
{
myArray = numString.split('.');
numberPart = myArray[0];
decPart = myArray[1];
}
else
{
numberPart = numString;
}
while (numberPart.length > 3)
{
var chunk:String = numberPart.substr(-3);
numberPart = numberPart.substr(0, numberPart.length - 3);
result = ',' + chunk + result;
}
if (numberPart.length > 0)
{
result = numberPart + result;
}
if(numString.indexOf('.') > 0)
{
result = result + '.' + decPart;
}
//alert('Result: ' + result);
return result;
}
public static function formatNumberString(value:Number,separator:String):String {
var result:String = "";
var digitsCount:Number = value.toString().length;
separator = separator || ",";
for (var i:Number = 0; i < digitsCount; i++) {
if ((digitsCount - i) % 3 == 0 && i != 0) {
result += separator;
}
result += value.toString().charAt(i);
}
return result;
}
Try this out, works fine for me:
var largeNumber:String=new String(1000000.999777);
var fAr:Array=largeNumber.split(".");
var reg:RegExp=/\d{1,3}(?=(\d{3})+(?!\d))/;
while(reg.test(fAr[0]))
fAr[0]=fAr[0].replace(reg,"$&,");
var res:String=fAr.join(".");
trace(res);
Trace: 1,000,000.999777
i used a CurrencyFormatter to parse 2 number into its currency representation
currencyFormat.format("10" + "." + "99") ---> $10.99
I'm curious if there is a way to parse a string "$10.99" back to a number / double ?
so it is possible to get the value on the left side of the decimal and right side of the decimal.
thanks,
You could do this a number of ways. Here are 2 off the top of my head:
function currencyToNumbers($currency:String):Object {
var currencyRE:RegExp = /\$([1-9][0-9]+)\.?([0-9]{2})?/;
var val = currencyRE.exec($currency);
return {dollars:val[1], cents:val[2]};
}
function currencyToNumbers2($currency:String):Object {
var dollarSignIndex:int = $currency.indexOf('$');
if (dollarSignIndex != -1) {
$currency = $currency.substr(dollarSignIndex + 1);
}
var currencyParts = parseFloat($currency).toString().split(".");
return {dollars:currencyParts[0], cents:currencyParts[1]};
}
var currency:Object = currencyToNumbers('$199.99');
trace(currency.dollars);
trace(currency.cents);
var currency2:Object = currencyToNumbers2('$199.99');
trace(currency2.dollars);
trace(currency2.cents);