Для проверки диагоналей не нужно поворачивать матрицу на 45°, достаточно проверять сумму индексов:
00 01 02
10 11 12
20 21 22
Диагонали слева снизу вправо вверх:
00 : 0+0 = 0
10, 01 : 1+0 = 0+1 = 1
20, 11, 02: 2+0 = 1+1 = 0+2 = 2
И так далее. Сумма индексов в таких диагоналях постоянна. Максимум в правой нижней клетке составляет удвоенный макс. индекс.
Чтобы проверить диагонали слева сверху вправо вниз, надо инвертировать индексы одного из измерений, напр. строк: не 0..N, а N..0
var arr = [
'o,x,x'.split(','),
'x,o,o'.split(','),
'o,x,o'.split(','),
];
var r, c, key, diags = {};
for(r = 0; r < arr.length; r++) {
for(c = 0; c < arr[r].length; c++) {
key = r + arr[r].length - 1 - c; // слева сверху вправо вниз
// key = r + c; // слева снизу вправо вверх
if( diags.hasOwnProperty(key)) {
if( diags[key] !== arr[r][c]) diags[key] = false;
} else {
diags[key] = arr[r][c];
}
}
}
for( key in diags) if( diags[key] === false) delete diags[key];
// {"0":"x","2":"o","3":"x","4":"o"}