motion musso aka: sathia wrote:
Lasse Reichstein Nielsen wrote:
Index of what? If the variable "i" is 0, do you want the index
of "a" in myarray? If so, how do you find "a" from the value 0,
if you don't have the original value of myarray any more?
I got it now,
I thought that when you give indexes to an array they would remain unvaried.
probably this is true only with string indexes.
Read the ECMAScript Language reference (section 15.4) - array indexes
*are* strings:
"Array objects give special treatment to a certain class of
property names. A property name P (in the form of a string
value) is an array index if and only if ToString(ToUint32(P))
is equal to P and ToUint32(P) is not equal to 2^32-1."
I think you are getting confused between Object objects and Array
objects. The only way to find the index of a particular value in an
array is to search for it, e.g.:
var anArray = ['apple', 'banana', 'pear'];
What is the index of 'banana'?
for (var i=0; i<anArray.length; i++){
if ('banana' == anArray[i]) {
alert('banana is at index ' + i);
}
}
Now if you do:
anArray.shift();
What is the index of 'banana' now? Arrays don't have to be contiguous:
anArray[100] = 'orange';
The length of anArray is now 101, even though it only has 4 elements
(or items or members, whatever). Such arrays are often called
'sparse'. You can iterate over just the indexes with a value using
for..in, but be aware that will find *all* enumerable properties of the
Array, not just the ones with numeric indexes.
Secondly, remember that Array's are just objects with a few extra
methods and a special length property. You can add properties to
ordinary objects and give them 'indexes', and you can add properties to
an array that don't have numeric indexes:
anArray.name = 'fred';
Now a for..in loop through anArray will stumble across 'fred' as well
as the four fruits, but looping over the indexes won't.
Also think about
:
var anObject = { 0 : 'apple', 1 : 'banana', 2 : 'pear'};
How would you find the 'index' of banana now? Probably using a for..in
loop:
for (idx in anObject){
if ('banana' == anObject[idx]){
alert('Property name for banana is ' + idx);
}
}
I hope that helps.
--
Rob