рони,
да одного цикла хватит. Если я правильно понял, то:
var a = [
[1, 2, 3, 4],
[12, 0, 0, 5],
[11, 0, 0, 6],
[10, 9, 8, 7]
], o = a[0], v = [];
for(var i=0, m = a.slice(1, -1); i<m.length; i++) {
o.push(m[i].pop());
v.push(m[i][0])
}
o = o.concat(a.pop().reverse(), v.reverse());
alert(o);