Donc, fondamentalement, j'ai ce code:
Array.prototype.inState = function (needle, haystack) {
let index = this.findIndex(value => value[needle] === haystack);
return index === -1;
};
et cela fonctionne assez bien pour vérifier si l'aiguille donnée existe ou non à l'état réactif. mais ESlint n'arrête pas de dire que:
Array prototype is read only, properties should not be added no-extend-native
donc ma question est: Quel est le problème avec mon code?
Depuis EsLint Docs:
En JavaScript, vous pouvez étendre n'importe quel objet, y compris les objets intégrés ou "natifs". Parfois, les gens modifient le comportement de ces objets natifs de manière à briser les hypothèses formulées à leur sujet dans d'autres parties du code.
Par exemple, ici, nous remplaçons une méthode intégrée qui affectera alors tous les objets, même les autres intégrés.
// seems harmless
Object.prototype.extra = 55;
// loop through some userIds
var users = {
"123": "Stan",
"456": "David"
};
// not what you'd expect
for (var id in users) {
console.log(id); // "123", "456", "extra"
}
En bref, Array.prototype.inState
étendra le array.prototype
et donc chaque fois que vous souhaitez utiliser un tableau, la fonction instate sera également ajoutée à ce tableau.
Donc, dans votre cas, cet exemple sera appliqué au tableau.
Array.prototype.inState = function (needle, haystack) {
let index = this.findIndex(value => value[needle] === haystack);
return index === -1;
};
// loop through some userIds
var users = [{"123": "Stan"},{"456": "David"}];
// not what you'd expect
for (var id in users) {
console.log(users[id]); // "123", "456", "extra"
}
Contournement
Vous pouvez ajouter cette ligne pour ignorer l'avertissement.
/*eslint no-extend-native: ["error", { "exceptions": ["Object"] }]*/ to ignore that warning.
C'est parce qu'esLint obtient sa mutation vers la chaîne native des protoTypes. Vous pouvez ajouter // eslint-disable-next-line no-extend-native
au-dessus de la ligne ça devrait aller.