473,396 Members | 2,010 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,396 software developers and data experts.

sorting an associative array keys based on values

Hi
I have an associative array like this:
arr[x1]=30; arr[x2]=20;arr[x3]=40;arr[x4]=10;

I want the sort function to sort keys in ascending order of the values
on the right hand side with the following result:
x4,x2,x1,x3

Can anyone please help me write the function?
Thank you

Jul 23 '05 #1
5 37673
so***********@yahoo.com wrote:
Hi
I have an associative array like this:
arr[x1]=30; arr[x2]=20;arr[x3]=40;arr[x4]=10;

I want the sort function to sort keys in ascending order of the values
on the right hand side with the following result:
x4,x2,x1,x3

Can anyone please help me write the function?
Thank you


<script language="JavaScript">
// create an array
var arr = [];
arr["x1"]=30;
arr["x2"]=20;
arr["x3"]=40;
arr["x4"]=10;

// show the current array
for (var sKey in arr)
document.write(sKey + ':' + arr[sKey] + '; ');
document.write('<br />');

// sort 'array'
var arr2 = sortAssoc(arr);

// show the sorted array
for (var sKey in arr2)
document.write(sKey + ':' + arr2[sKey] + '; ');
document.write('<br />');

// And here comes the funciton itself
function sortAssoc(aInput)
{
var aTemp = [];
for (var sKey in aInput)
aTemp.push([sKey, aInput[sKey]]);
aTemp.sort(function () {return arguments[0][1] < arguments[1][1]});

var aOutput = [];
for (var nIndex = aTemp.length-1; nIndex >=0; nIndex--)
aOutput[aTemp[nIndex][0]] = aTemp[nIndex][1];

return aOutput;
}
</script>

Hope I helped you/
Sergey.

Jul 23 '05 #2
so***********@yahoo.com wrote:
Hi
I have an associative array like this:
arr[x1]=30; arr[x2]=20;arr[x3]=40;arr[x4]=10;

I want the sort function to sort keys in ascending order of the values
on the right hand side with the following result:
x4,x2,x1,x3


If you can guarantee unique numeric keys on the right...

function assocSort (oAssoc) {
var idx; var key; var arVal = []; var arValKey = []; var oRes = {};
for (key in oAssoc) {
arVal[arVal.length] = oAssoc[key];
arValKey[oAssoc[key]] = key;
}
arVal.sort();
for (idx in arVal)
oRes[arValKey[arVal[idx]]] = arVal[idx];
return oRes;
}

var arr = {x1:30, x2:20, x3:40, x4:10}
var arrSorted = assocSort(arr);
Csaba Gabor from Vienna

Jul 23 '05 #3
VK
> I have an associative array
Thank you for your perfect language
;-) :-|
I want the sort function to sort keys
in ascending order of the values


(1) First of all, you may want to use the standard associative array
syntacs for predefined values (given that x1...x4 are real variables in
your script)

var map = { x1 : 30, x2 : 20 , x3 : 40, x4 : 10};

(2) JavaScript doesn't have an associative array as a programming
entity. So any more or less complicated operations over an associative
array have to be programmed manually by yourselve. In your case there
is no way (?) to accomplish that w/o multiple pass over the hash
table.
To be continued... (if you still need it)

Jul 23 '05 #4
so***********@yahoo.com writes:
I have an associative array like this:
arr[x1]=30; arr[x2]=20;arr[x3]=40;arr[x4]=10;
I guess you have
var arr = new Object();
or something, as well as the variables x1..x4 declared.
I want the sort function to sort keys in ascending order of the values
on the right hand side with the following result:
x4,x2,x1,x3
I assume values are always numbers. Otherwise a less trivial
comparison function is needed.

function sortByValue(keyArray, valueMap) {
return keyArray.sort(function(a,b){return valueMap[a]-valueMap[b];});
}

testing:

var arr = {foo: 30, bar: 20, baz:40, doh: 10};
var keyArray = ["foo","bar","baz","doh"]
alert(sortByValue(keyArray, arr));
Can anyone please help me write the function?


There you go.
/L
--
Lasse Reichstein Nielsen - lr*@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'
Jul 23 '05 #5
Lasse Reichstein Nielsen wrote:
so***********@yahoo.com writes:

I have an associative array like this:
arr[x1]=30; arr[x2]=20;arr[x3]=40;arr[x4]=10;

I guess you have
var arr = new Object();
or something, as well as the variables x1..x4 declared.


I may have read it wrong but I read it as more like arr['x1'] where the
quotes were forgotten. If the sort is to be done by strings (if they are
indeed strings) then its a simple matter of .sort() and .reverse().

If the sort is based on the value of the variables, then you wouldn't
always get the order x4, x3, x2, x1 unless you grab the variable name
itself and create your own list and then sort and reverse it.

--
Randy
comp.lang.javascript FAQ - http://jibbering.com/faq & newsgroup weekly
Jul 23 '05 #6

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

21
by: Leonardo | last post by:
I have the following associative array: $user=1; $user=1; $user=0; $user=1; $user=0; $user=1; $user=1;
1
by: noah | last post by:
Can anyone think of a way to make array keys case insensitive? An option on any recent PHP would be to convert all array keys to lowercase using the standard array_change_key_case() function. As...
2
by: Zenobia | last post by:
I have a problem. I need to look up several values stored in arrays. Each value is stored as a pair. The first (number) represents the probability of this item occurring. For instance, in the...
6
by: mark4asp | last post by:
Suppose I have the following code. It functions to randomly select a city based upon the probabilities given by the key differences in the associative array. . Eg. because the key difference...
2
by: Remi Bastide | last post by:
Is is possible to initialize a javascript associative array inline, as you would do in PHP, e.g. : <?php $a = array("abc" => "def", "ghi" => "jkl"); ?>
47
by: VK | last post by:
Or why I just did myArray = "Computers" but myArray.length is showing 0. What a hey? There is a new trend to treat arrays and hashes as they were some variations of the same thing. But they...
11
by: Angus Comber | last post by:
Hello I want to create a lookup table where I can store string keys: For example: 192.168.0.1 -> Purple 192.168.0.2 -> Blue 192.168.0.3 -> Red
3
by: Matthias Heise | last post by:
Hello, how can I walk through an associative Array in C#? example array: int arr = new Array(); int = 5; int = 10; ....
2
by: ctj951 | last post by:
What I am trying to do is implement a associative array to lookup data based on a key in C. This might simple to do in C++ but I'm restricted to use C. The size of the data for the table isn't too...
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.