Reputation: 6949
I've got a string!
It's made up of number + [space] + thing-string. I need to be able to order the whole string with reference to the number. So it should come out:
It's a simple bubble sort for the number and then cross-referencing the index to get the final order. The JavaScript code below works, but I can't help but think it could be made more efficient. Am I missing a trick here??
And remember: I'm an artist, so I code in crayon!
var eventsStr = "7 serpents\n4 bikes\n2 mangoes"
var splitArr = eventsStr.split("\n")
var numArray = new Array();
var events = new Array();
for (var i = 0; i < splitArr.length; i++)
{
var temp = splitArr[i] ;
var part1 = temp.substring(0, temp.indexOf(" "))
var part2 = temp.substring(temp.indexOf(" ")+1, temp.length)
numArray[i] = part1;
events[i] = part2;
}
var sorted = superCopy(numArray);
var sorted = sorted.sort(sortArrayNumerically);
alert(getOrder(sorted, numArray, events))
function getOrder(orderedarr, arr1, arr2)
{
var str = "";
for (var i = 0; i < arr1.length; i++)
{
for (var j = 0; j < orderedarr.length; j++)
{
if (arr1[i] == orderedarr[j])
{
// found the thing !what is the event?
str += arr1[i] + " " + arr2[i] + "\n";
}
}
}
return str
}
function sortArrayNumerically(a,b)
{
return a - b;
}
function superCopy(arr)
{
tempArr = new Array();
for (var i = 0; i < arr.length; i++)
{
tempArr[i] = arr[i]
}
return tempArr
}
Upvotes: 0
Views: 75
Reputation: 63442
You could use JavaScript's sort()
function:
eventsStr.split('\n').sort().join('\n');
eventsStr.split('\n')
- first split the string on the newline character to create an array.sort()
- then use the sort()
function to sort the array.join('\n')
- then put the string back together, joining the array elements with a newline between themReference:
This is an alphabetic sort though, so if your string contained, say, 12 mangoes, the result would not be sorted numerically. To sort numerically, you could do something like this:
eventsStr.split('\n').sort(function(a, b) {
return parseInt(a.split(' ')[0], 10) > parseInt(b.split(' ')[0], 10);
}).join('\n');
In this situation, the sort()
function is called with a callback parameter, taking 2 values: the first string to be compared and the second string to be compared. This callback function then splits the string, extracts the number and compares it with the number in the other string.
Upvotes: 2
Reputation: 8840
Use
splitArr.sort() // as per your code
DEMO
var eventsStr = "7 serpents\n4 bikes\n2 mangoes"
arr = eventsStr.split('\n')
# ["7 serpents", "4 bikes", "2 mangoes"]
arr
# ["7 serpents", "4 bikes", "2 mangoes"]
arr.sort()
# ["2 mangoes", "4 bikes", "7 serpents"]
Upvotes: 0