Every now and then I come across questions on StackOverflow that require me to do a bit of thought-work. This particular question was asking to to take an array, such as ['a','b','c','d','e'], and flip it inside out, so that it becomes ['c','d','b','e','a']. I’m not a particularly mathematical person, so when I discover a difficult to discern pattern, I get excited – such was the case with the code below.
// Arrays to sort
var data = ["a","b","c","d","e"],
info = ["a","b","c","d"];
// Sort array from inside-out ['a','b','c','d','e']
// Resulting in the following ['c','d','b','e','a']
function gut (arr) {
// Resulting array, Counting variable, Number of items,
// initial Location
var out = [], cnt,
num = arr.length,
loc = Math.floor(num/2);
// Cycle through as many times as the array is long
for (cnt = 0; cnt < num; cnt++)
// Protecting our cnt variable
(function () {
// If our array has an odd number of entries
if (num % 2) {
// If on an odd iteration
if (cnt % 2) {
// Move location forward
loc = loc + (+cnt);
} else {
// Move location backwards
loc = loc + (-cnt);
}
// Our array has an even number of entries
} else {
// If on an odd iteration
if (cnt % 2) {
// Move location backwards
loc = loc + (-cnt);
} else {
// Move location forwards
loc = loc + (+cnt);
}
}
// Push val at location to new array
out.push(arr[loc]);
})()
// Return new array
return out;
}
// Test with two arrays; even and odd sizes.
console.log(gut(data), gut(info));
Which results in the following output:
["c", "d", "b", "e", "a"] ["c", "b", "d", "a"]
Perhaps you will find some use for it.
I like a good problem
. Here’s my stab at it. Should work for even and odd length arrays. http://jsfiddle.net/YolandaMDavis/KxP8k/2/