Ошибка 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);
}
});
});