/ / ESLint nepovoľuje in - javascript, eslint, for-in-loop

ESLint neumožňuje - javascript, eslint, for-in-loop

Mám objekt

currentValues= {hey:1212, git:1212, nmo:12121}

a používam to takto:

for (const key in currentValues) {
if (Object.prototype.hasOwnProperty.call(currentValues, key)) {
yield put(setCurrentValue(key, currentValues[key]));
}
}

ESLint mi ukazuje chybu, ktorá hovorí:

ESLint: for..in loop iterate cez celý prototypový reťazec, čo je prakticky nikdy to, čo chcete. Použite objekt. {Kľúče, hodnoty, záznamy} a iterujte výsledné pole. (Bez obmedzenia-syntax

Ako mám upraviť svoj kód?

odpovede:

11 pre odpoveď č. 1

Hovorí,

Použite objekt. {Kľúče, hodnoty, záznamy} a iterujte výsledok array.

Mohli by ste urobiť niečo také, aby ste získali kľúče od objektu ako pole a potom cez tieto kľúče prešli potrebné zmeny.

currentValues= {hey:1212, git:1212, nmo:12121}

Object.keys(currentValues).forEach(function(key) {
yield put(setCurrentValue(key, currentValues[key]));
})


4 pre odpoveď č. 2

Použil som toto:

const keys = Object.keys(currentValues);
const values = Object.values(currentValues);
for (let i = 0; i <= keys.length; i += 1) {
yield put(setCurrentValue(keys[i], values[i]));
}

čo je korektné bez chýb eslint


1 pre odpoveď č. 3

Môžete získať celý rad všetkých svojich hodnôt vnútri objektu

var myValuesInArray = Object.values(currentValues);

-2 pre odpoveď č. 4

Použitím for...in bude opakovať všetky vlastnosti vrátane vlastností z prototypu objektu. Nie som si istý, prečo to robíte Object.prototype.hasOwnProperty.call(currentValues, key) namiesto: currentValues.hasOwnProperty(key), Myslím, že by to malo upozorniť spoločnosť ESLint, že filtrujete iba pre svoje vlastné vlastnosti.

Navrhujem však použitie for (const key of Object.keys()), čo je viac sémantické.