Я работаю с матрицей объектов и пытаюсь найти максимальные значения для каждого из объектов, включая дубликаты.
Вот что у меня есть до сих пор:
let findColumnMaxValue = (i) => {
let coord = [];
let maxValue = 0;
for (let j = 0; j < this.field.length; j++) {
if (this.field[i][j].dst > maxValue) {
maxValue = this.field[i][j].dst;
}
}
getMaxValueCoord(maxValue, coord, i);
return coord;
}
Здесь я нахожу максимальное значение для каждой строки каждого столбца.
let getMaxValueCoord = (max, a, i) => {
for (let j = 0; j < this.field.length; j++) {
if (this.field[i][j].dst === max) {
a.push({x: i, y: j})
}
}
}
и в этой функции, после нахождения максимума, я сравниваю каждую строку каждого столбца с максимальным значением и помещаю координаты объекта в массив, если он соответствует условию.
findHighestDensityCells() {
let arr = [];
for (let i = 0; i < this.field.length; i++) {
arr.push(findColumnMaxValue(i));
}
return [].concat(...arr);
}
Теперь, когда у меня есть массив всех координат максимального значения объекта для каждого столбца, я хочу, чтобы этот массив содержал только максимальные значения, включая дубликаты, в основном повторяя многое из того, что я сделал выше.
То, что я написал выше, похоже, занимает слишком много кода, чтобы решить эту простую проблему. Существуют ли другие методы, которые я мог бы использовать, чтобы уменьшить объем кода?
РЕДАКТИРОВАТЬ
Данные представляют собой простой объект options = { dst: 0 }
со значением, которое обновляется другой функцией. Поэтому все строки в столбцах содержат вышеуказанный объект, каждый с разными значениями. Итак, моя матрица может выглядеть так:
2 3 4 5 6 6 5 4 3 2
3 4 5 6 7 7 6 5 4 3
4 5 6 7 8 8 7 6 5 4
5 6 3 4 9 9 4 3 2 1
6 7 3 4 9 9 4 3 2 1
6 7 3 4 5 5 4 3 2 1
5 6 3 4 5 5 4 3 2 1
4 6 3 4 5 5 4 3 2 1
3 5 3 4 5 5 4 3 2 1
2 4 3 4 5 5 4 3 2 1
Желаемый результат - получить все максимальные значения в матрице в виде координат, включая дубликаты. В приведенном выше примере это будет [9,9,9,9].