Вы можете сохранить один уровень зацикливания, сначала создав карту для сопоставления имени с индексом i . Кроме того, indexOf
, вероятно, будет работать быстрее, чем проверка пустой строки во внутреннем цикле:
// Preprocessing
const names = {};
for (let i = 1; i <= Mnr; i++) names[I[i].name] = i;
// Main
for (let j = 1; j <= Jnr; j++) {
const row = A[j];
const counterRow = counter[j];
let m = row.indexOf("")-1;
if (m < 0) m = Jnr;
for (let k = 1; k <= m; k++) {
let i = names[row[k]];
if (i !== undefined) counterRow[i]++;
}
}
Примечание: ваши массивы имеют значения, начиная с индекса 1. Это нетипично для JavaScript (и многих других языков). Рассмотрите возможность заполнения ваших массивов, чтобы первая запись была в 0, а последняя в Jnr - 1
, ... и т. Д. Это также может немного увеличить производительность, так как в этом случае оптимизатор парсера может работать лучше.