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/