var array = [["B", "C", "C", "C", "C", "B", "B", "C", "A", "A"], ["B", "A", "C", "B", "B", "A", "B", "B", "A", "A"], ["B", "C", "B", "C", "A", "A", "A", "B", "C", "B"], ["B", "B", "B", "A", "C", "B", "A", "C", "B", "A"], ["A", "A", "A", "C", "A", "C", "C", "B", "A", "C"], ["A", "B", "B", "A", "A", "C", "B", "C", "C", "C"], ["C", "B", "A", "A", "C", "B", "B", "C", "A", "A"]],
points = {},
rectangles = [],
count=0;
array.forEach((a, i) => a.forEach((b, j) => (points[b] = points[b] || []).push({ j, i })));
Object
.keys(points)
.forEach(k => {
points[k].slice(0,-1).forEach((p, m) => {
var n = points[k].length,
q;
while (n--) {
q = points[k][n];
if (p.i < q.i && p.j < q.j && k === array[p.i][q.j] && k === array[q.i][p.j]) {
rectangles.push({ key: k, top: p.i, left: p.j, bottom: q.i, right: q.j, size: (q.i - p.i + 1) * (q.j - p.j + 1) });
}
}
});
});
rectangles.sort((a, b) => b.size - a.size);
console.log(rectangles);
.as-console-wrapper { max-height: 100% !important; top: 0; }