[Last Call] Learn about multicloud storage options and how to improve your company's cloud strategy. Register Now

x
Solved

# array.sort() being ignored in a for... in loop

Posted on 2007-11-26
Medium Priority
165 Views
I have an array whihc I have put a sort on, when I sue a for in loop to loop through the array, it acts as if the array hadn't been sorted. I noticed that using a regular for loop solves this problem, however, however I need this to work with the for in loop. I am aware that a for in will go through an array in reverse order, however this isn't the issue.

Here is the code greatly simplified code, and below, the results of the traces

Many thanks for helping solve this problem

function layout() {
var cats = ["40artist", "30still", "50fashion"];
trace("---- Part 1: "+cats);
cats.sort();
trace("---- Part 2: "+cats+"\n");
for (var i in cats) {
trace("---- Part 3: "+cats[i]);
}
trace("\n---- Part 4: "+cats+"\n");
}

layout();

---- Part 1: 40artist,30still,50fashion
---- Part 2: 30still,40artist,50fashion

---- Part 3: 40artist
---- Part 3: 30still
---- Part 3: 50fashion

---- Part 4: 30still,40artist,50fashion

0
Question by:cursive
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points
• 2

LVL 23

Expert Comment

ID: 20355861
Try changing, though your code seems working for me.
cats.sort();
to
cats = cats.sort();
0

LVL 34

Expert Comment

ID: 20356084
cats.sort() is working fine in your code,
problem is that you are tracing the part3 using "for in" loop which does not gets effected with Array.sort();
you should use "for()" loop

here is the fixed code and it works fine:

``````function layout()
{
var cats = ["40artist", "30still", "50fashion"];
trace("---- Part 1: "+cats);
cats.sort();
trace("---- Part 2: "+cats+"\n");
for (var i = 0; i<cats.length; i++)
{
trace("---- Part 3: "+cats[i]);
}
trace("\n---- Part 4: "+cats+"\n");
}

layout();
``````
0

LVL 34

Accepted Solution

Aneesh Chopra earned 2000 total points
ID: 20356105
If you have to have "for in" sorting then you can do it with using an extra temp Array

here is the code which will do the trick for you
``````function layout()
{
var cats = ["40artist", "30still", "50fashion"];
trace("---- Part 1: "+cats);
cats.sort();
trace("---- Part 2: "+cats+"\n");

var tmp_arr = [];
for (var i = 0; i<cats.length; i++)
{
tmp_arr.push(cats[i]);
}
cats = tmp_arr;
for (var i in cats)
{
trace("---- Part 3: "+cats[i]);
}
trace("\n---- Part 4: "+cats+"\n");
}

layout();
``````
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

I know the transition can be hard. We got used to the ease of use ActionScript 2 had, but honestly, it became problematic later on, especially if designers were involved in the project and found it easy to add code as they saw fit. So, this artic…
I have found that much of my time doing support ends up being a constant repetition of the same steps to different people.  Early on I stated using web pages with Frequently Asked Questions (FAQs) to alleviate most of the burden.  Sometimes this jus…
In this tutorial viewers will learn how to create a basic shape tween animation in Flash including shape hints for smooth animation Open a new document in Flash: Draw a shape: Select another frame (how long you want the tween to be): Right click and…
The goal of the tutorial is to teach the user how to live broadcast using Flash Media Live Encoder and connecting it to YouTube to broadcast. Log into your Youtube account, choose live stream settings, start live stream from Flash Media Live Enc…
###### Suggested Courses
Course of the Month12 days, 13 hours left to enroll