Forum Moderators: open

Message Too Old, No Replies

Sorting of Arrays

         

aax123

10:44 pm on Oct 14, 2005 (gmt 0)

10+ Year Member



lblFieldOrder looks like this:
Make¦Model¦StockNumber¦VINLast8¦Year¦Series¦RetailValue¦BodyStyle¦

When it is split it looks like this:
arTemp[0] "Make"
arTemp[1] "Model"
arTemp[2] "StockNumber"
arTemp[3] "VINLast8"
arTemp[4] "Year"
arTemp[5] "Series"
arTemp[6] "RetailValue"
arTemp[7] "BodyStyle"
arTemp[8] ""
----------------------
I need to figure out how to put var liner in the same order as lblFieldOrder. lblFieldOrder would be different each time. Any ideas?

var arTemp, charCount, i
var liner=new Array( );
liner[0]=document.forms[0].elements["liner_Year_" + vid].value;
liner[1]=document.forms[0].elements["liner_Make_" + vid].value;
liner[2]=document.forms[0].elements["liner_Model_" + vid].value;
liner[3]=document.forms[0].elements["liner_Series_" + vid].value;
liner[4]=document.forms[0].elements["liner_BodyStyle_" + vid].value;
liner[5]=document.forms[0].elements["liner_VINFull_" + vid].value;
liner[6]=document.forms[0].elements["liner_VINLast8_" + vid].value;
liner[7]=document.forms[0].elements["liner_Miles_" + vid].value;
liner[8]=document.forms[0].elements["liner_RetailPrice_" + vid].value;
liner[9]=document.forms[0].elements["liner_InternetPrice_" + vid].value;

arTemp = lblFieldOrder.split("¦");
charCount = 0;
i = 0;
while (i < arTemp.length) {
arTemp1 = arTemp[i].split("¦");
n = 0;

// don't know what needs to go here?

i += 1;
}

Bernard Marx

11:20 pm on Oct 14, 2005 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member



There are a couple of things I don't understand.

1 - [minor])

The

lblFieldOrder
string has a trailing ¦ delimiter. Is this necessary, or do you want the last - empty string - member to be created?

2 - [major])

The number of fields in

lblFieldOrder
doesn't match the number of elements in the array, liner. Even then, some fields don't match. What kind of order are we after?
<edit>
..or are we going for "match
lblFieldOrder
, then carry on"
</edit>

Bernard Marx

12:27 am on Oct 15, 2005 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member



This one does what I think you want.

var lblFieldOrder
= 'Make¦Model¦StockNumber¦VINLast8¦Year¦Series¦RetailValue¦BodyStyle¦'
.replace(/\¦$/,'')
.split('¦');

var linerBaseNames =
[
'Year',
'Make',
'Model',
'Series',
'BodyStyle',
'VINFull',
'VINLast8',
'Miles',
'RetailPrice',
'InternetPrice'
];

var liner = new Array;

liner.add = function(name)
{
this[this.length] = elements['liner_'+name+'_'+vid].value;
}

var elements = document.forms[0].elements;
var name, n, field, f;

/* Run through fieldOrder.
If finds matching name, then add field to
liner array; leave flag */
for( n=-1; field=lblFieldOrder[++n]; )
{
for( f=-1; name=linerBaseNames[++f]; )
{
if(field == name)
{
liner.add(field);
linerBaseNames[f] = -1;
break;
}
}
}
/* put remaining names from linerBaseNames
at bottom, keeping order */
for( f=-1; name=linerBaseNames[++f]; )
if( name +1 )
liner.add(name);

aax123

12:56 am on Oct 15, 2005 (gmt 0)

10+ Year Member



1 - [minor])

>> A trailing ¦¦ is not needed. an empty string - member could be created.

2 - [major])

>> The number of fields in lblFieldOrder won't always match the number of elements in the array, liner. Actually liner doesn't have to be in an array. I just need liner value to be in the same order as lblFieldOrder. The values are pulled from the form element values.

i.e. lblFieldOrder would look like this:
lblFieldOrder = "Make¦Model¦StockNumber¦VINLast8¦Year¦Series¦RetailValue¦BodyStyle¦"
i.e. liner would look like this:
liner = "Chevrolet Corvette FF555JHJ IUIKOOOU 2001 SEDAN $24,000 SDN"

This is the way I had it at first but now I need liner to be in the order of lblFieldOrder
var liner = document.forms[0].elements["liner_Year_" + vid].value;
liner += ' '
liner += document.forms[0].elements["liner_Make_" + vid].value;
liner += ' '
liner += document.forms[0].elements["liner_Model_" + vid].value;
liner += ' '
liner += document.forms[0].elements["liner_Series_" + vid].value;
liner += ' '
liner += document.forms[0].elements["liner_BodyStyle_" + vid].value;
liner += ' '
liner += document.forms[0].elements["liner_VINFull_" + vid].value;
liner += ' '
liner += document.forms[0].elements["liner_VINLast8_" + vid].value;
liner += ' '
liner += document.forms[0].elements["liner_Miles_" + vid].value;
liner += ' '
liner += document.forms[0].elements["liner_RetailPrice_" + vid].value;
liner += ' '
liner += document.forms[0].elements["liner_InternetPrice_" + vid].value;

Bernard Marx

2:30 pm on Oct 15, 2005 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member



This what you're after?


[color=brown]/* dummy vid value */[/color]
var vid = 'xvid';

[color=brown]/* Fields:
1: Remove trailing ¦ (if exists)
2: Split field string into array
(#1 is no longer actually necessary )
*/[/color]
var lblFieldOrder
= 'Make¦Model¦StockNumber¦VINLast8¦Year¦Series¦RetailValue¦BodyStyle¦'
.replace(/\¦$/,'')
.split('¦');

[color=brown]/* liner starts as array */[/color]
var liner = new Array;
[color=brown]/* handy shortcut */[/color]
var elements = document.forms[0].elements;

[color=brown]/* loop fields:
If corresponding form element exists,
push value into liner
*/[/color]
for(var k=0, field, elm; field=lblFieldOrder[k++];)
{
elm = elements['liner_'+field+'_'+vid];
if(elm) liner[liner.length] = elm.value;
}
[color=brown]/* Convert liner into space-delimited string */[/color]
liner = liner.join(' ');

aax123

4:34 am on Oct 17, 2005 (gmt 0)

10+ Year Member



Bernard Marx you are the man. Your last one worked perfect. Thanks so much.

aax123

5:31 pm on Oct 17, 2005 (gmt 0)

10+ Year Member



This worked great for me the 1st time however; when I step into it and the function is called again, lblFieldOrder now has commas separating the fields. Is there a way to take lblFieldOrder out of the array the 2nd time through?

1st Time:
lblFieldOrder = 'Make¦Model¦StockNumber¦VINLast8¦Year¦Series¦RetailValue¦BodyStyle¦'
2nd Time:
lblFieldOrder = 'Make,Model,StockNumber,VINLast8,Year,Series,RetailValue,BodyStyle,'

lblFieldOrder = lblFieldOrder;
alert(lblFieldOrder);
lblFieldOrder = lblFieldOrder.replace(/\¦$/,'');
lblFieldOrder = lblFieldOrder.split('¦');

var liner = new Array;
var elements = document.forms[0].elements;

for(var k=0, field, elm; field=lblFieldOrder[k++];) {
elm = elements['liner_'+field+'_'+vid];
if(elm) liner[liner.length] = elm.value;
}

var linerText = liner.join(' ');

Bernard Marx

4:06 pm on Oct 18, 2005 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member



lblFieldOrder has been split into an array. It isn't comma-separated, that is just the way that arrays are reprsented when converted to string ( when used in the alert function).

If you are doing this process more than once, just make sure that lblFieldOrder is split into an array somewhere else, then just use the array version.

aax123

7:04 pm on Oct 18, 2005 (gmt 0)

10+ Year Member



Got it to work. The second time thru since it has a comma I added this and it worked.

lblFieldOrder = lblFieldOrder.toString();
lblFieldOrder = lblFieldOrder.replace(/\,/g,"¦");

Thanks so much for your help.