web-dev-qa-db-fra.com

JS Hint - ne crée pas de fonctions dans une boucle

Je ne peux pas contourner le message d'erreur de JSHint. Voici la boucle que j'utilise:

for (i = 0; i < Collection.length; i += 4) {
    data.Push({
        items : Collection.slice(i, i + 4).map(function(item) {
            return {
                id: item[0],
                title: item[1],
            };
        })
    });
}
51
myTD

Vous pouvez simplement déplacer la fonction en dehors de la boucle et lui donner une référence à map:

function mapCallback(item) {
    return {
        id : item[0],
        title : item[1],
    };
}
for (i = 0; i < Collection.length; i += 4) {
    data.Push({
        items: Collection.slice(i, i + 4).map(mapCallback)
    });
}

Vous pouvez également utiliser une directive JSHint pour ignorer les expressions de fonction dans les boucles. Il suffit de mettre ceci en haut du fichier en question:

/*jshint loopfunc: true */
103
James Allardice

Déclarer une fonction dans une boucle est compliqué et potentiellement sujet aux erreurs. Au lieu de cela, définissez la fonction une fois, puis entrez la boucle.

var objMaker = function(item) {
    return {
        id : item[0],
        title : item[1],
    };
};

for (i = 0; i < Collection.length; i += 4) {
    data.Push({
                  items : Collection.slice(i, i + 4).map(objMaker)
             });
}
6
Cory Kendall