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ď č. 1Hovorí,
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é.