Ошибка LS JS: не создавать функции в цикле - нет обходного пути

У меня есть небольшой фрагмент кода в реагирующем JS, в котором я пытаюсь найти значение в "категориях" объекта, а затем вставляю соответствующую пару ключ-значение в новую карту sortedCategories,

var categoriesToSort = []; //categoriesToSort has some values
var sortedCategories = new Map();
for(var j = 0 ; j < categoriesToSort.length ; j++) {
    categories.forEachMap(function(key, value){
       if(categoriesToSort[j] === value) {
          sortedCategories.set(key, value);
       }
    });
}

Но это дает мне следующую ошибку, и я не получаю никакого обходного пути.

Не создавайте функции в цикле

2 ответа

Я не вижу причин, по которым рефакторинг вашего кода не сработает. По сути, мы берем функцию обратного вызова из цикла и используем j переменная, как это в закрытии. Я переместил var j объявление над обратным вызовом, чтобы он выглядел красиво, но технически это не обязательно.

var categoriesToSort = []; //categoriesToSort has some values
var sortedCategories = new Map();
var j;
var itter = function(key, value) {
    if(categoriesToSort[j] === value) {
        sortedCategories.set(key, value);
    }
};
for(j = 0 ; j < categoriesToSort.length ; j++) {
    categories.forEachMap(itter);
}

Как насчет использования forEach вместо цикла for?

var categoriesToSort = []; //categoriesToSort has some values
var sortedCategories = new Map();
categoriesToSort.forEach(function (cat) {
    categories.forEachMap(function(key, value){
       if(cat === value) {
          sortedCategories.set(key, value);
       }
    });
});
Другие вопросы по тегам